动态向类添加元素

时间:2019-06-23 18:49:47

标签: c++ class

我正在尝试一些代码。我有一个类IntArr,我必须向其中添加元素,但是当我通过类的大小时,调整大小无法正常工作。我只能添加

  class IntArr{
     private:
         int * p;
         int size;
         int used;
     public:
         IntArr (int sz);
         IntArr (int sz,int qtty,int *vec);
         ~IntArr();
         void prtArr (void) ;
         void addElement(int xx);
         void addElement(int qtty, int* vec);
 };

 void IntArr:: addElement(int xx){
     if(used+1>size){
         std::vector<int> p;
         size+=6;
         p.resize(size);
     } 
     p[used]=xx;
     used++;
 }
 void IntArr:: addElement(int qtty, int* vec){
     int i;
     i=used;
     std::vector<int> p;
     size+=qtty;
     p.resize(size);
     while(i-used<qtty){
         p[i]=vec[i-used];
         i++;
     }
     used+=qtty;
 } 

void IntArr:: prtArr (void) const{
    using namespace std;
    int i=0;
    cout<<"> Array : ";
    if(!used)
        cout<<"Vacio !!!";
    else
        while(i<used){
            cout<<p[i]<<" ";
            i++;
        }
    cout<<endl;
  }

 int main(int argc, char *argv[])
 {
 int v_aux[]={0,5,10,15,20,25,30,35,40};
 IntArr A(10,sizeof(v_aux)/sizeof(int),v_aux);
 cout<<" size:"<<A.getSize()<<endl<<" used:"<<A.getUsed()<<endl;
 A.prtArr(); 
 A.addElement(77);
 cout<<" size:"<<A.getSize()<<endl<<" used:"<<A.getUsed()<<endl;
 A.prtArr();
 A.addElement(11);
 cout<<" size:"<<A.getSize()<<endl<<" used:"<<A.getUsed()<<endl;
 A.prtArr();
 A.addElement(8,v_aux);
 cout<<" size:"<<A.getSize()<<endl<<" used:"<<A.getUsed()<<endl;
 A.prtArr();
 PRESS_KEY;
 }

该代码仅能很好地添加元素77。

1 个答案:

答案 0 :(得分:0)

在addElement上,您没有使用在类上定义的私有int * p。每次addElement方法创建一个本地p std :: vector时,该方法返回时都会销毁。