inizializza un vettore a zero C ++ / C ++ 11


118

So che in C ++ 11 hanno aggiunto la funzionalità per inizializzare una variabile a zero in quanto tale

double number = {}; // number = 0
int data{};  // data = 0

Esiste un modo simile per inizializzare un std::vectordi una lunghezza fissa su tutti gli zeri?


13
std::vector<int> vec(42);
avakar

9
btw, questo non è nuovo in c ++ 11, puoi farlo anche nelle versioni precedenti
balki

Risposte:


220

Non hai bisogno di elenchi di inizializzazione per questo:

std::vector<int> vector1(length, 0);
std::vector<double> vector2(length, 0.0);

37
Non è necessario dichiarare esplicitamente lo 0, vero? solo vector(length)dovrebbe funzionare?
Daniel Gratzer

38
@jozefg: Sì, funzionerebbe, anche se non c'è nulla di male nell'essere espliciti su ciò che vuoi che il codice faccia.
Ronag

1
@ronag ho scritto la mia risposta perché essere esplicito in questo caso non è necessariamente un buon esempio se int non è il tipo con cui sta lavorando. La programmazione gereral è disponibile in c ++ ma quando mi è stato ricordato che puoi omettere del tutto l'argomento, ho rimosso la mia risposta.
Johannes Schaub - litb

1
Un vettore viene inizializzato automaticamente a 0, a meno che non specifichi qualche altro valore nella dichiarazione, come ronag mostrato.
Nikos

È possibile reinizializzare tutti gli elementi di Global Vector con ZEROcon in modo efficiente senza utilizzare i cicli for ??????
Ankit Mishra

0

L'inizializzazione di un vettore con struttura, classe o unione può essere eseguita in questo modo

std::vector<SomeStruct> someStructVect(length);
memset(someStructVect.data(), 0, sizeof(SomeStruct)*length);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.