C++ C++;复制并调整使用新运算符初始化的已分配数组的大小
复制此阵列的正确方法是什么?以下是我的尝试C++ C++;复制并调整使用新运算符初始化的已分配数组的大小,c++,new-operator,arrays,C++,New Operator,Arrays,复制此阵列的正确方法是什么?以下是我的尝试 int* array1 = new[ 10 ]( ); 话虽如此,以下是向完整数组1添加值的正确方法吗 int* array2 = array1; 我想得到初始化元素的数量,所以我想得到实际有多少个元素有一个值,而不是返回分配数组可以容纳的元素数量2。我想这样做,这样我就可以用array1的大小替换以前代码中的10 谢谢大家! 编辑:由于我的导师,我需要坚持使用c风格的数组 int* array1 = new[ 2 ]; array1[ 0 ] =
int* array1 = new[ 10 ]( );
话虽如此,以下是向完整数组1添加值的正确方法吗
int* array2 = array1;
我想得到初始化元素的数量,所以我想得到实际有多少个元素有一个值,而不是返回分配数组可以容纳的元素数量2。我想这样做,这样我就可以用array1的大小替换以前代码中的10
谢谢大家!
编辑:由于我的导师,我需要坚持使用c风格的数组
int* array1 = new[ 2 ];
array1[ 0 ] = 1;
// the resulting array would look like this { 1 };
将一个指针指定给另一个指针,即它复制存储在array1
中的地址,并使array2
也指向该地址
如果要在仍使用指针的情况下进行深度复制,可以使用memcpy
:
int* array2 = array1;
这是一种可怕的C风格的方法,在可能的情况下你应该避免
我能想到的唯一合理的解决方案是使用
std::array
或std::vector
而不是C型数组
std::vector
与数组不同的是,对象具有自己的赋值运算符(以及复制构造函数),可以按预期的方式复制它:
int* array2 = new int[10];
memcpy(array2, array1, 10 * sizeof(int));
std::vectorVec1(10,0);//10个数字初始化为0
std::vector vec2=vec1;//注意,这实际上调用了复制构造函数
标准::向量vec3(vec1);//与前一行相同
vec3=vec1;//为您制作深度副本的作业
您可以从一个空的std::vector
开始,并使用其push_back
方法不断向其推送新元素,并随时调用vec.size()
检索其大小。另外:您不负责清理存储其元素的内存-如果您像我在上面的代码中指出的那样使用它,这些是具有自动存储持续时间的对象,当它们超出范围时会为您清理内存
将一个指针指定给另一个指针,即它复制存储在array1
中的地址,并使array2
也指向该地址
如果要在仍使用指针的情况下进行深度复制,可以使用memcpy
:
int* array2 = array1;
这是一种可怕的C风格的方法,在可能的情况下你应该避免
我能想到的唯一合理的解决方案是使用
std::array
或std::vector
而不是C型数组
std::vector
与数组不同的是,对象具有自己的赋值运算符(以及复制构造函数),可以按预期的方式复制它:
int* array2 = new int[10];
memcpy(array2, array1, 10 * sizeof(int));
std::vectorVec1(10,0);//10个数字初始化为0
std::vector vec2=vec1;//注意,这实际上调用了复制构造函数
标准::向量vec3(vec1);//与前一行相同
vec3=vec1;//为您制作深度副本的作业
您可以从一个空的std::vector
开始,并使用其push_back
方法不断向其推送新元素,并随时调用vec.size()
检索其大小。另外:您不负责清理存储其元素的内存-如果您像我在上面的代码中指出的那样使用它,这些是具有自动存储持续时间的对象,当它们超出范围时会为您清理内存
将一个指针指定给另一个指针,即它复制存储在array1
中的地址,并使array2
也指向该地址
如果要在仍使用指针的情况下进行深度复制,可以使用memcpy
:
int* array2 = array1;
这是一种可怕的C风格的方法,在可能的情况下你应该避免
我能想到的唯一合理的解决方案是使用
std::array
或std::vector
而不是C型数组
std::vector
与数组不同的是,对象具有自己的赋值运算符(以及复制构造函数),可以按预期的方式复制它:
int* array2 = new int[10];
memcpy(array2, array1, 10 * sizeof(int));
std::vectorVec1(10,0);//10个数字初始化为0
std::vector vec2=vec1;//注意,这实际上调用了复制构造函数
标准::向量vec3(vec1);//与前一行相同
vec3=vec1;//为您制作深度副本的作业
您可以从一个空的std::vector
开始,并使用其push_back
方法不断向其推送新元素,并随时调用vec.size()
检索其大小。另外:您不负责清理存储其元素的内存-如果您像我在上面的代码中指出的那样使用它,这些是具有自动存储持续时间的对象,当它们超出范围时会为您清理内存
将一个指针指定给另一个指针,即它复制存储在array1
中的地址,并使array2
也指向该地址
如果要在仍使用指针的情况下进行深度复制,可以使用memcpy
:
int* array2 = array1;
这是一种可怕的C风格的方法,在可能的情况下你应该避免
我能想到的唯一合理的解决方案是使用
std::array
或std::vector
而不是C型数组
std::vector
与数组不同的是,对象具有自己的赋值运算符(以及复制构造函数),可以按预期的方式复制它:
int* array2 = new int[10];
memcpy(array2, array1, 10 * sizeof(int));
std::vectorVec1(10,0);//10个数字初始化为0
std::vector vec2=vec1;//注意,这实际上调用了复制构造函数
标准::向量vec3(vec1);//与前一行相同
vec3=vec1;//为您制作深度副本的作业
您可以从一个空的std::vector
开始,并使用其push_back
方法不断将新元素推送到它,并随时调用vec来检索它的大小