2012-03-07 14 views
19

Quiero inicializar una matriz en el formato que utiliza comas para separar los elementos rodeados por llaves por ejemplo:Uso nuevo operador para inicializar una matriz

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

Sin embargo, tengo que utilizar el operador new para asignar la memoria por ejemplo:

int *array = new int[10]; 

¿hay una manera de combinar las tesis métodos para que pueda asignar la memoria usando el nuevo operador e inicializar la matriz con las llaves?

+6

Una matriz no es un puntero. –

+0

¿Qué quiere decir "necesitar"? –

Respuesta

16

Puede usar memcpy después de la asignación.

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

No tengo conocimiento de ninguna sintaxis que te permita hacer esto automágicamente.

edición Mucho más tarde:

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

O, de manera equivalente, 'std :: copy (originalArray, originalArray + 10, array)', no hay mucho para elegir entre ellos. En C++ 11 puedes hacer 'std :: end (originalArray)' en lugar de 'originalArray + 10'. –

+0

@SteveJessop ¿Esto significa que la matriz contiene información de tamaño en C++ 11? –

+0

El tipo de matriz incluye el tamaño, igual que en C++ 03. 'std :: end' está especializado en matrices, con el antiguo' T * end (T (& ra) [N]) {return ra + N; } 'truco. No hay información nueva almacenada para el acceso en tiempo de ejecución, y no funcionaría si 'originalArray' fuera un puntero. –

34

En el nuevo estándar para C++ (C++ 11), se puede hacer esto:

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

Se llama una lista de inicializadores . Pero en versiones anteriores de la norma que no fue posible.

La referencia en línea relevante con más detalles (y muy difícil de leer) es here. También lo probé usando GCC y la opción --std=c++0x y confirmó que funciona efectivamente.

+2

+1 No creo que el op tenga un compilador compatible con C++ 11, de lo contrario, habría aceptado esta respuesta. –

+0

@LuchianGrigore Eso está bien ... Y, de hecho, según la [matriz de compatibilidad C++ 11] (https://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport), GCC parece ser el único compilador importante hasta el momento que admite listas de inicializadores. – jogojapan

Cuestiones relacionadas