当不需要使用grow函数时,向量显示就很好,但是一旦初始化了grow函数,向量的显示就会发疯,这是结果

输出:

增长函数未初始化:

[R



C

Ë

[R



在这种情况下,通过添加另一个元素“ E”来初始化增长函数

[R



[R



#include<iostream>

using namespace std;

class vector{

    public:
        void add(char);
        void display();
        void setSizes();

    private:
        void grow();
        int growthSize;
        int maxSize;
        int currSize=0;
        char * arr;

};


//initializes private variables
void vector::setSizes(){
    growthSize=2;
    maxSize= 7;
    arr = new char[maxSize];
}



//grows the vector
void vector::grow(){
    int *temp = new int[maxSize];
    //Makes copy of array
        for(int i=0;i<maxSize;i++){
            temp[i]=arr[i];
        }

    delete arr;

    int *arr = new int[maxSize+growthSize];
        for(int i= 0; i<maxSize; i++){
        arr[i]= temp[i];
        }

    delete temp;
    maxSize= maxSize + growthSize;
    cout<< "The array grew by " << growthSize << " elements."<< endl;
    }



//adds to the vector
void vector::add(char insert){
    arr[currSize]=insert;
    currSize++;
    if(currSize == maxSize){
        grow();
    }

}



void vector::display(){
    for(int i=0;i<currSize;i++){

        cout<<arr[i]<< endl;

    }

}


 int main(){

    vector bill;
    bill.setSizes();
    bill.add('R');
    bill.add('B');
    bill.add('C');
    bill.add('E');
    bill.add('R');
    bill.add('B');
    bill.add('E');

    bill.display();






}

最佳答案

这条线

int *arr = new int[maxSize+growthSize];


在类中隐藏arr的声明,因此您只需要使用局部变量即可。

关于c++ - 在队列中实现 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27010319/

10-09 06:00