2012-03-07 19 views
19

voglio inizializzare un array nel formato che utilizza le virgole per separare gli elementi immersi tra parentesi graffe Es:Utilizzare operatore new per inizializzare un array

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

Tuttavia, ho bisogno di utilizzare l'operatore new per allocare la memoria es:

int *array = new int[10]; 

c'è un modo per combinare tesi metodi in modo che possa allocare la memoria utilizzando l'operatore new e inizializzare l'array con le parentesi graffe?

+6

Una matrice non è un puntatore. –

+0

Cosa intendi con "bisogno di"? –

risposta

16

È possibile utilizzare memcpy dopo l'assegnazione.

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

Non sono a conoscenza di alcuna sintassi che consente di farlo automaticamente.

Molto più tardi edit:

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

O in modo equivalente, 'std :: copy (originalArray, originalArray + 10, array)', non c'è molto da scegliere tra loro. In C++ 11 puoi fare 'std :: end (originalArray)' al posto di 'originalArray + 10'. –

+0

@SteveJessop Questo significa che l'array contiene informazioni sulle dimensioni in C++ 11? –

+0

Il tipo di matrice include la dimensione, come in C++ 03. 'std :: end' è specializzato per gli array, con la vecchia' T * end (T (& ra) [N]) {return ra + N; } 'trucco. Non ci sono nuove informazioni memorizzate per l'accesso al runtime e non funzionerebbe se 'originalArray' fosse un puntatore. Correzione –

34

Nel nuovo standard per C++ (C++ 11), si può fare questo:

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

Si chiama un elenco di inizializzazione . Ma nelle versioni precedenti dello standard non era possibile.

Il riferimento online pertinente con ulteriori dettagli (e molto difficile da leggere) è here. L'ho provato anche usando GCC e l'opzione --std=c++0x e ho confermato che funziona davvero.

+2

+1 Non penso che l'op abbia un compilatore compatibile con C++ 11, altrimenti avrei accettato questa risposta. –

+0

@LuchianGrigore Va bene ... E in effetti, secondo la [matrice di supporto C++ 11] (https://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport), GCC sembra essere l'unico compilatore principale finora supporta gli elenchi di inizializzatori. – jogojapan

Problemi correlati