我正在尝试在C ++中动态调整数组的大小,并逐步执行步骤,但是输出与我放入数组中的数字不匹配。首先,我创建一个更大的新数组,然后复制原始数组的所有元素,然后将另一个元素添加到新数组,删除旧数组,并将旧数组的指针设置为新数组数组。
我不确定是否应该返回指针,因为参数是通过引用传递的,对吧?
#include <iostream>
using namespace std;
void resize( int*, int, int );
int main()
{
int *arr = new int[5];
for( int i=0; i<5; i++ )
arr[i] = i;
for( int i=0; i<5; i++ )
cout << arr[i];
cout << endl;
resize( arr, 5, 5 );
for( int i=0; i<6; i++ )
cout << arr[i] << endl;
cout << endl;
return 0;
}
void resize( int *arr, int size, int yes )
{
int *newA = new int[size+1];
for( int i=0; i<size; i++ )
{
cout << arr[i];
newA[i] = arr[i];
}
delete [] arr;
newA[size] = yes;
arr = newA;
}
这是输出:
002340
但我希望新数组为0 1 2 3 4 5
答案 0 :(得分:0)
您正在传递arr
值作为指针,而不是通过引用。我们可以通过添加resize
来修改&
以通过引用传递指针:
// Passes the pointer to 'arr' by reference
void resize(int*& arr, int size, int yes )
{
int *newA = new int[size+1];
for( int i=0; i<size; i++ )
{
cout << arr[i];
newA[i] = arr[i];
}
delete [] arr;
newA[size] = yes;
arr = newA;
}
话说回来,标准库有一个内置的类已经可以做到这一点!它被称为std::vector
,并且结构完善,与常规数组一样快(使用优化进行编译时),并且它会自动删除分配的所有内存!
使用std::vector
,原始代码如下:
int main()
{
std::vector<int> arr(5); // Create a vector with 5 elements
// Assign them
for(int i=0; i<5; i++ )
arr[i] = i;
// Print them
for( int i=0; i<5; i++ )
cout << arr[i];
cout << endl;
// add the number 5 at the end of arr
// resize happens automatically
arr.push_back(5);
// The number 5 now appears at the end of the array
for( int i=0; i<6; i++ )
cout << arr[i] << endl;
cout << endl;
return 0;
}