C++ 使用new运算符初始化数组

C++ 使用new运算符初始化数组,c++,arrays,new-operator,C++,Arrays,New Operator,我想以使用逗号分隔大括号中的元素的格式初始化数组,例如: int array[10]={1,2,3,4,5,6,7,8,9,10}; 但是,我需要使用新运算符来分配内存,例如: int *array = new int[10]; 是否有一种方法可以组合这些方法,以便我可以使用新运算符分配内存,并使用大括号初始化数组?分配后,您可以使用memcpy int originalArray[] ={1,2,3,4,5,6,7,8,9,10}; int *array = new int[10]; me

我想以使用逗号分隔大括号中的元素的格式初始化数组,例如:

int array[10]={1,2,3,4,5,6,7,8,9,10};
但是,我需要使用新运算符来分配内存,例如:

int *array = new int[10];

是否有一种方法可以组合这些方法,以便我可以使用新运算符分配内存,并使用大括号初始化数组?

分配后,您可以使用
memcpy

int originalArray[] ={1,2,3,4,5,6,7,8,9,10};
int *array = new int[10];
memcpy(array, originalArray, 10*sizeof(int) );
我不知道有什么语法可以让你自动完成这项工作

稍后编辑:

const int *array = new int[10]{1,2,3,4,5,6,7,8,9,10};

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

int* a = new int[10] { 1,2,3,4,5,6,7,8,9,10 };
这叫做初始化列表。但在以前版本的标准中,这是不可能的


更详细的相关在线参考资料(很难阅读)如下所示。我还使用GCC和
--std=c++0x
选项尝试了它,并确认它确实可以工作。

数组不是指针。或者等效地,
std::copy(originalArray,originalArray+10,array)
,它们之间没有太多选择。在C++11中,您可以使用
std::end(originalArray)
代替
originalArray+10
@SteveJessop这是否意味着数组在C++11中保存大小信息?数组的类型包括大小,与C++03中相同
std::end
专门用于数组,使用旧的
T*end(T(&ra)[N]){return ra+N;}
技巧。没有为运行时访问存储的新信息,如果
originalArray
是指针,它将不起作用。更正:重载,没有专门化(因为它是一个函数模板,不能部分专门化)。如果数组是指向常量的指针,如何实现相同的效果?+1我认为op没有与C++11兼容的编译器,否则我会接受这个答案。@LuchianGrigore没关系。。。事实上,根据作者的说法,GCC似乎是迄今为止唯一支持初始值设定项列表的主要编译器。