创建向量类C ++错误

头脑风暴

因此,我有编写的这段代码。我知道这是非常基本的,可能永远都不要这样做。我只是想让它工作。问题是当我的push_back函数被调用时,所有变量突然混乱并且无法正常工作。例如vectorsize变为1,并且cap变为某个随机的大数。我想知道正在发生什么以及如何解决它。

这是向量类的代码

#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;
}
鲍勃__

您没有显示类的私有成员,但是假设这cap是分配的内存的大小,而vectorSizepush_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可能会抛出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章