void insert(int*arr, int element,int index)
{
if (index < SIZE)
{
arr[index] = element;
}
else
{
int* new_array = new int[SIZE + 1];
int i = 0;
for (i = 0; i < SIZE; i++)
{
new_array[i] = arr[i];
}
new_array[i] = element;
SIZE++;
printArray(new_array);
}
}
我在C ++中创建了一个插入函数,它将在数组的特定索引处插入值。索引增加后,我创建了一个新数组,并将较小数组中的值复制到其中。 问题是printArray函数只是循环打印数组在插入函数内部调用时运行良好,否则当我从数组的主要最后一个值调用printArray时,为什么会这样?
答案 0 :(得分:4)
您需要删除旧数组并在其位置返回新数组,例如:
void insert(int* &arr, int element, int index) // <<< make `arr` a reference so that we can modify it
{
if (index < SIZE)
{
arr[index] = element;
}
else
{
int* new_array = new int[SIZE + 1];
for (int i = 0; i < SIZE; i++)
{
new_array[i] = arr[i];
}
new_array[SIZE] = element;
SIZE++; // <<< NB: using a global for this is not a great idea!
delete [] arr; // <<< delete old `arr`
arr = new_array; // <<< replace it with `new_array`
}
}
请注意,如果您开始使用正确的C ++惯用语,例如std::vector<int>
而不是C风格的int *
数组,那么对阵列的所有显式低级别管理都会消失。