如何在 C++ 中的函数内创建数组的动态副本
How to create a dynamic copy of an array inside a function in C++
为了实现处理数组的特定函数,我需要创建函数作为参数获取的数组的副本。但是,当我 运行 代码时出现错误。函数里面这两行是不是有什么问题?
void shift(int array[], int length, int offset)
{
int* array2=new int[length];
array2[]=array[];
...
}
你不能像那样复制数组。
array2 和 array 是内存中的起始地址,因此将它们相互分配是没有意义的。
您需要复制内容
这可以做到,例如通过 c 运行时函数 memcpy 或使用 std::copy
memcpy(array2, array, length);
或
std::copy(array, array + length, array2);
数组没有复制赋值运算符。此外,即使存在这样的运算符,这种语法在任何情况下都是无效的
array2[]=array[];
如果您需要获取数组的副本,则必须逐个元素地进行复制。例如,您可以使用 header <algorithm>
中声明的标准算法 std::copy
或 header <cstring>
中声明的标准 C 函数 memcpy
例如,您的函数可能如下所示
#include <algorithm>
//...
int * shift( int array[], int length, int offset )
{
int *array2 = new int[length];
std::copy_n( array + offset, length, array2 );
return array2;
}
使用 memcpy 复制操作看起来
#include <cstring>
//...
std::memcpy( array2, array + offset, length * sizeof( int ) );
为了实现处理数组的特定函数,我需要创建函数作为参数获取的数组的副本。但是,当我 运行 代码时出现错误。函数里面这两行是不是有什么问题?
void shift(int array[], int length, int offset)
{
int* array2=new int[length];
array2[]=array[];
...
}
你不能像那样复制数组。
array2 和 array 是内存中的起始地址,因此将它们相互分配是没有意义的。
您需要复制内容
这可以做到,例如通过 c 运行时函数 memcpy 或使用 std::copy
memcpy(array2, array, length);
或
std::copy(array, array + length, array2);
数组没有复制赋值运算符。此外,即使存在这样的运算符,这种语法在任何情况下都是无效的
array2[]=array[];
如果您需要获取数组的副本,则必须逐个元素地进行复制。例如,您可以使用 header <algorithm>
中声明的标准算法 std::copy
或 header <cstring>
memcpy
例如,您的函数可能如下所示
#include <algorithm>
//...
int * shift( int array[], int length, int offset )
{
int *array2 = new int[length];
std::copy_n( array + offset, length, array2 );
return array2;
}
使用 memcpy 复制操作看起来
#include <cstring>
//...
std::memcpy( array2, array + offset, length * sizeof( int ) );