2011-09-22 25 views
9

Hola, quiero inicializar un vector de tamaño 9 cuyos elementos son vectores del tamaño, digamos 5. Quiero inicializar todos los elementos al vector cero.inicializando un vector de vector <doubles> C++

¿Es así?

vector<double> z(5,0); 

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

¿O hay una manera más corta de hacer esto?

+1

Esa es la manera correcta de crear un vector 2D. Estás siendo un poco más prolijo, eso es todo. –

+2

¿Este tamaño 9x5 es fijo? –

+0

Sí, sé los tamaños antes de la mano. Simplemente elige el 9 y 5 para que sean algunos resultados aleatorios para esta pregunta. – smilingbuddha

Respuesta

12

Usted podría hacer esto en una sola línea:

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

También puede ser que desee considerar el uso de boost::multi_array para el almacenamiento y el acceso más eficiente (que evita la doble indirección del puntero).

+1

Alternativamente, un vector de 45 elementos con acceso estriado también podría ser suficiente ... –

+2

'vector (5)' basta. 'vector (5, 0)' no es necesario, siempre que el segundo argumento sea '0'. – Nawaz

4

Bastante seguro de que esto funcionará:

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

Usted puede poner todo en una sola línea:

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

Esto evita la variable local sin uso.

(En pre-C++ 11 compiladores que necesita para dejar un espacio, > >.)

+0

Tenga cuidado de '>>' en su sintaxis. Algunos compiladores requieren un espacio entre esos símbolos. – riwalk

+3

@ Stargazer712 ¡esos compiladores ya no cumplen! : P –

+2

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

5

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

Sin embargo, en el caso específico en el que los tamaños son conocidos en tiempo de compilación que podía uso una matriz C:

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

4

Si los tamaños son fijos, se puede ir con std::array lugar:

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

También depende de la magnitud de las extensiones. 'std :: array' mantiene todo en el ámbito local, por lo que si esa matriz es demasiado grande, podría desencadenar algún error cuyo nombre se me escape. –

+0

¿Desbordamiento de pila? –