So I have this code I wrote. I understand it is very basic and probably should never ever be done like this. I was just trying to get it to work. The problem is when my push_back function is called all the variables are suddenly jumbled and it fails to work. Such as the vectorsize becomes 1, and the cap becomes some random large number. I was wondering what was happening and how to fix it.
This is the code for the vector class
#include "MyVector.h"
void MyVector::grow()
{
if (cap == 0)
cap = MINCAP;
else
cap = cap*MINCAP;
int* temp = new int[cap];
for (int i = 0; i < vectorSize; i++)
{
temp [i] = theVector[i];
}
delete[] theVector;
theVector = temp;
}
MyVector::MyVector()
{
clear();
}
MyVector::~MyVector()
{
}
MyVector::MyVector(int _cap)
{
cap = _cap;
}
int MyVector::size()
{
return vectorSize;
}
int MyVector::capacity()
{
return cap;
}
void MyVector::clear()
{
vectorSize = 0;
cap = MINCAP;
delete(theVector);
theVector = new int[MINCAP];
}
void MyVector::push_back(int n)
{
if (vectorSize+1 >= cap)
{
grow();
theVector[vectorSize] = n;
}
else
{
theVector[vectorSize] = n;
}
}
int MyVector::at(int _location)
{
return theVector[_location];
}
This is the code for the driver program to test it.
// Project #12 Implementation file for the driver
// CS 1400 (your section)
// Your name
// the date
// ------------------------
#include "driver.h"
int main()
{
// Create a default vector
MyVector sam;
// push some data into sam
cout << "\nPushing three values into sam";
//It seems to be happening right here when the function is called
sam.push_back(TEST_VALUE1);
sam.push_back(TEST_VALUE2);
sam.push_back(TEST_VALUE3);
cout << "\nThe values in sam are: ";
// test for out of bounds condition here
// and test exception
for (int i = 0; i < sam.size() + 1; i++)
{
try
{
cout << sam.at(i) << " ";
}
catch (int badIndex)
{
cout << "\nOut of bounds at index " << badIndex << endl;
}
}
cout << "\n--------------\n";
// clear sam and display its size and capacity
sam.clear();
cout << "\nsam has been cleared.";
cout << "\nSam's size is now " << sam.size();
cout << "\nSam's capacity is now " << sam.capacity() << endl;
cout << "---------------\n";
// Push 12 values into the vector - it should grow
cout << "\nPush 12 values into sam.";
for (int i = 0; i < MAX; i++)
sam.push_back(i);
cout << "\nSam's size is now " << sam.size();
cout << "\nSam's capcacity is now " << sam.capacity() << endl;
cout << "---------------\n";
cout << "\nTest to see if contents are correct...";
// display the values in the vector
for (int i = 0; i < sam.size(); i++)
{
cout << sam.at(i) << " ";
}
cout << "\n--------------\n";
cout << "\n\nTest Complete...";
cout << endl;
system("PAUSE");
return 0;
}