2012-04-24 22 views
20

Ho bisogno di creare dinamicamente un array di numero intero. Ho scoperto che quando si usa un array statico la sintassiC++ valore iniziale dell'array dinamico

int a [5]={0}; 

inizializza correttamente il valore di tutti gli elementi a 0.

c'è un modo per fare qualcosa di simile quando si crea una matrice dinamica come

int* a = new int[size]; 

senza dover eseguire il ciclo su tutti gli elementi dell'array? o forse assegnare il valore con un ciclo for è ancora il modo ottimale per andare? Grazie

+2

Vuoi dire 'new int [size]'? – kennytm

+2

Non puoi usare un 'std :: vector'? Questo inizializza tutti i valori a zero (o qualsiasi altro valore tu scelga) – Nick

+0

@KennyTM modifica typo, spiacente – Arno

risposta

30

Certo, basta usare () per il valore-inizializzazione:

int* ptr = new int[size](); 

(tratto da this answer alla mia precedente domanda strettamente correlata)

+1

@shartptooth L'ho provato e ho ricevuto un errore: errore: ISO C++ proibisce l'inizializzazione in array new [-fermermive] – Arno

+0

@Arno che dovrebbe essere compilato. Che compilatore stai usando? – juanchopanza

+0

@juanchopanza GCC compilatore g ++ all'interno di eclissi cdt – Arno

4

farei:

int* a = new int[size]; 
memset(a, 0, size*sizeof(int)); 
+0

funziona perfettamente, grazie! – Arno

+6

@Arno Il modo corretto è la risposta di Sharptooth. –

+1

'senza dover ricorrere a loop su tutti gli elementi dell'array' - Non è proprio quello che stai facendo con 'memset'? Anche se quel memset sarà senza dubbio ottimizzato dalla macchina. –

4

vi consiglio di utilizzare std::vector<int> o std::array<int,5>

2

Valore inizializzare gli elementi con ()

Esempio:

int *p = new int[10];  // block of ten uninitialized ints 
int *p2 = new int[10](); // block of ten ints value initialized to 0 
2

inizializzare con valori diversi da 0,

per matrice puntatore:

int size = 10; 
int initVal = 47; 
int *ptrArr = new int[size]; 
std::fill_n(ptrArr, size, initVal); 
std::cout << *(ptrArr + 4) << std::endl; 
std::cout << ptrArr[4] << std::endl; 

Per matrice non puntatore

int size = 10; 
int initVal = 47; 
int arr[size]; 
std::fill_n(arr, size, initVal); 

Funziona molto per qualsiasi DataType!

! Attenzione, alcuni compilatori non potrebbe lamentarsi accesso a un valore al di fuori del campo della matrice che potrebbe restituire un valore diverso da zero