当不需要使用grow函数时,向量显示就好了,但是一旦grow函数被初始化,向量的显示就会变得疯狂,这里是结果
输出:
未初始化增长功能:
[R
乙
C
电子
[R
乙
通过在这种情况下添加另一个元素“E”来初始化Grow函数
[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();
}
答案 0 :(得分:3)
这一行
int *arr = new int[maxSize+growthSize];
在类中隐藏了arr
的声明,因此您只需使用局部变量。