向动态数组添加内容

时间:2017-03-28 23:35:41

标签: c++

如果数组已满,我想将X添加到我的数组的末尾我的大小加倍但是我在将它放入newArray后将其插入newArray我使用指针将dynamicArray切换为newArray。

  #include <iostream>
using namespace std;

class IntegerDynamicArray {
    public:
        IntegerDynamicArray();    
      ~IntegerDynamicArray();
        int add(int x);
    private:
        int * dynamicArray;
        int currentSize=maxSize;
        int maxSize=4;

};``

IntegerDynamicArray::IntegerDynamicArray()
   {
      dynamicArray = new int [maxSize];
   }
   IntegerDynamicArray::~IntegerDynamicArray()
   {
      delete [] dynamicArray;
   }

int IntegerDynamicArray::add(int x)
   {
     cout<<x<<endl;
      if(dynamicArray[currentSize-1]!=0)
      {
         int * newArray;
         newArray= new int[currentSize*2];
         for(int i =0;i<currentSize;i++)
         {
            newArray[i]=dynamicArray[i];
            newArray[currentSize]=x;

         }
         currentSize=currentSize*2;
         dynamicArray = newArray;


      }
      else
      {
         int * newArray;
         newArray= new int[currentSize];
         for(int i =0;i<currentSize;i++)
         {
            newArray[i]=dynamicArray[i];
            newArray[currentSize-1]=x;

         }

          dynamicArray = newArray;



      }
      return *dynamicArray;
   }




int main() {
    IntegerDynamicArray intDynArray;
    while (1) {
        char input;
        cout << "Enter A for add or anything else to quit: ";
        cin >> input;
        if (input == 'A') {
            cout << "Enter number to add: ";
            int x;
            cin >> x;
            cout << intDynArray.add(x) << endl;
        } else {
            break;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。因为你没有问过一个专门的问题,所以这些是主要问题:

  • 您的类缺少一个包含数组最后写入(或下一个空闲)索引的索引的变量。相反,你(错误)使用currentSize作为索引变量。

  • 在每次调用add()时,您都会分配一个新数组,尽管它可能尚未填满。

  • 正如评论中已经提到的那样,在复制到新阵列之后,您不会delete []旧阵列。

  • 使用0作为数组中的插槽为空的指示符,但是不要阻止将0添加为常规元素,并且不要将数组初始化为零。

答案 1 :(得分:0)

托马斯马修斯指出:

调用add(int x)时泄漏内存。对于每次使用new,都应该要求删除

请考虑以下事项:

 int n=10;
 int* x= new int[n];
 //assign some values

 int* temp=new int[n*2]; //create new array

 for(int i=0;i<n;i++)
  temp[i]=x[i]; //assign values from x

 delete[] x; //free memory

 x=temp; //assign to x address of new array

手动内存管理可能存在风险,因此请考虑将来使用std :: vector