web-dev-qa-db-fra.com

Utiliser un nouvel opérateur pour initialiser un tableau

Je veux initialiser un tableau au format qui utilise des virgules pour séparer les éléments entourés d'accolades, par exemple:

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

Cependant, je dois utiliser le nouvel opérateur pour allouer la mémoire, par exemple:

int *array = new int[10];

Existe-t-il un moyen de combiner ces méthodes afin que je puisse allouer la mémoire en utilisant le nouvel opérateur et initialiser le tableau avec les accolades?

23
lilroo

Vous pouvez utiliser memcpy après l'allocation.

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

Je ne connais aucune syntaxe qui vous permette de le faire automatiquement.

Édition beaucoup plus tard:

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

Dans le nouveau Standard pour C++ (C++ 11), vous pouvez faire ceci:

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

Cela s'appelle une liste d'initialisation . Mais dans les versions précédentes de la norme, cela n'était pas possible.

La référence en ligne pertinente avec plus de détails (et très difficile à lire) est ici . Je l'ai également essayé en utilisant GCC et le --std=c++0x option et a confirmé que cela fonctionne en effet.

38
jogojapan