2011-09-22 21 views
9

Ciao Voglio inizializzare un vettore di dimensione 9 i cui elementi sono vettori della dimensione, diciamo 5. Voglio inizializzare tutti gli elementi sul vettore zero.inizializzazione di un vettore di vettore <doubles> C++

È corretto?

vector<double> z(5,0); 

vector< vector<double> > diff(9, z); 

O c'è un modo più breve per farlo?

+1

Questo è il modo corretto di creare un vettore 2D. Sei solo un po 'più prolisso è tutto. –

+2

È stata risolta questa dimensione 9x5? –

+0

Sì, conosco le taglie prima della mano. Ho appena scelto il 9 e il 5 per essere alcuni elementi casuali per questa domanda. – smilingbuddha

risposta

12

Si potrebbe fare questo in una sola riga:

vector<vector<double> > diff(9, vector<double>(5)); 

si potrebbe anche voler considerare l'utilizzo boost::multi_array per l'archiviazione più efficiente e l'accesso (evita doppio puntatore indiretto).

+1

In alternativa, un vettore di 45 elementi con accesso stridulo potrebbe anche essere sufficiente ... –

+2

'vector (5)' è sufficiente. 'vector (5, 0)' non è richiesto, a condizione che il secondo argomento sia '0'. – Nawaz

4

abbastanza sicuro che questo funzionerà:

vector< vector<double> > diff(9, vector<double>(5,0)); 
5

Si può mettere tutto in una sola riga:

vector<vector<double>> diff(9, vector<double>(5)); 

questo modo si evita la variabile locale inutilizzato.

(in pre-C++ 11 compilatori è necessario lasciare uno spazio, > >.)

+0

Attenzione per '>>' nella sintassi. Alcuni compilatori richiedono uno spazio tra questi simboli. – riwalk

+3

@ Stargazer712 quei compilatori non sono più conformi! : P –

+2

@ R.MartinhoFernandes, conforme o no, esistono :) – riwalk

5

vector< vector<double> > diff(9, std::vector<double>(5, 0));

Tuttavia, nel caso specifico in cui le dimensioni sono noti al momento della compilazione si potrebbe uso un array di C:

double diff[9][5] = { { 0 } };

4

Se le dimensioni sono fisse, si può andare con std::array invece:

std::array<std::array<double,5>,9> diff = {}; 
+1

Dipende anche dalla grandezza delle estensioni. 'std :: array' mantiene tutto nello scope locale, quindi se quell'array è troppo grande, potresti attivare qualche errore il cui nome mi sfugge. –

+0

Overflow dello stack? –