所以我写了这个代码。我知道这是非常基本的,可能永远不应该这样做。我只是想让它发挥作用。问题是当我的push_back函数被调用时,所有变量都突然混乱并且无法工作。例如,矢量化变为1,并且上限变为一些随机的大数。我想知道发生了什么以及如何解决它。
这是矢量类的代码
#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];
}
这是驱动程序测试它的代码。
// 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;
}
答案 0 :(得分:0)
您没有显示您的类的私有成员,但假设cap
是已分配内存的大小,而vectorSize
是push_back函数的实际大小:
void MyVector::push_back(int n)
{
if ( vectorSize == cap )
// if it's full ^^ needs more space
{
grow();
}
theVector[vectorSize] = n;
// update the size after insertion
++vectorSize;
}
请注意,还有许多其他问题,例如构造函数设置容量而不分配任何内存或缺少析构函数。还要记住,new
可能会抛出。