Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;复制并调整使用新运算符初始化的已分配数组的大小_C++_New Operator_Arrays - Fatal编程技术网

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来检索它的大小