当不需要使用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/