使用new运算符初始化数组

lil*_*roo 24 c++ arrays new-operator

我想以一种格式初始化一个数组,该格式使用逗号分隔花括号中包围的元素,例如:

int array[10]={1,2,3,4,5,6,7,8,9,10};
Run Code Online (Sandbox Code Playgroud)

但是,我需要使用new运算符来分配内存,例如:

int *array = new int[10];
Run Code Online (Sandbox Code Playgroud)

有没有办法结合这些方法,以便我可以使用new运算符分配内存并使用花括号初始化数组?

jog*_*pan 38

在新的C++标准(C++ 11)中,您可以这样做:

int* a = new int[10] { 1,2,3,4,5,6,7,8,9,10 };
Run Code Online (Sandbox Code Playgroud)

它被称为初始化列表.但在以前版本的标准中是不可能的.

进一步的细节(非常难读)相关的在线参考是在这里.我也尝试使用GCC和--std=c++0x选项,并确认它确实有效.

  • +1我不认为op有一个C++ 11兼容的编译器,否则我已经接受了这个答案. (2认同)

Luc*_*ore 21

您可以memcpy在分配后使用.

int originalArray[] ={1,2,3,4,5,6,7,8,9,10};
int *array = new int[10];
memcpy(array, originalArray, 10*sizeof(int) );
Run Code Online (Sandbox Code Playgroud)

我不知道任何语法可以让你自动执行此操作.

很久以后编辑:

const int *array = new int[10]{1,2,3,4,5,6,7,8,9,10};
Run Code Online (Sandbox Code Playgroud)

  • 或者等价地,`std :: copy(originalArray,originalArray + 10,array)`,它们之间没有多少选择.在C++ 11中,您可以使用`std :: end(originalArray)`来代替`originalArray + 10`. (4认同)