如果数组已满,我想将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;
}
}
}
答案 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