Inicializando un std :: vector bidimensional

Entonces, tengo lo siguiente:

std::vector< std::vector  > fog; 

y lo estoy inicializando muy ingenuamente como:

  for(int i=0; i<A_NUMBER; i++) { std::vector  fogRow; for(int j=0; j<OTHER_NUMBER; j++) { fogRow.push_back( 0 ); } fog.push_back(fogRow); } 

Y se siente muy mal … ¿Hay alguna otra forma de inicializar un vector como este?

Utilice el constructor std::vector::vector(count, value) que acepta un tamaño inicial y un valor predeterminado:

 std::vector > fog( A_NUMBER, std::vector(OTHER_NUMBER)); // Defaults to zero initial value 

Si un valor diferente a cero, digamos 4 por ejemplo, era requerido para ser el predeterminado, entonces:

 std::vector > fog( A_NUMBER, std::vector(OTHER_NUMBER, 4)); 

También debo mencionar que la inicialización uniforme se introduce en C ++ 11, que permite la inicialización del vector y de otros contenedores, usando {} :

 std::vector > fog { { 1, 1, 1 }, { 2, 2, 2 } }; 

No hay un método de std::vector en std::vector , pero si desea crear un vector que contenga A_NUMBER vectores de int , cada uno de los other_number contenga ceros other_number , puede hacer esto:

 std::vector> fog(A_NUMBER, std::vector(OTHER_NUMBER)); 

La syntax general, como se representa ya es:

 std::vector > v (A_NUMBER, std::vector  (OTHER_NUMBER, DEFAULT_VALUE)) 

Aquí, el vector ‘v’ se puede visualizar como una matriz bidimensional, con ‘A_NUMBER’ de filas, con ‘OTHER_NUMBER’ de columnas con su valor inicial establecido en ‘DEFAULT_VALUE’.

También se puede escribir así:

 std::vector  line(OTHER_NUMBER, DEFAULT_VALUE) std::vector > v(A_NUMBER, line) 

Ingresar valores en un vector 2-D es similar a ingresar valores en una matriz 2-D:

 for(int i = 0; i < A_NUMBER; i++) { for(int j = 0; j < OTHER_NUMBER; j++) { std::cin >> v[i][j] } } 

Ya se han mencionado ejemplos en otras respuestas …!

Supongamos que desea inicializar el vector 2D, m * n, con el valor inicial como 0

podríamos hacer esto

 #include int main(){ int m = 2, n = 5; vector> vec(m, vector (n, 0)); return 0; }