2011-06-27 19 views
9

he siguiente std::vector declaración:multi-dimensional vector de inicialización

std::vector<std::vector<std::vector<int> > > m_input;

estoy inicializándola de la siguiente manera:

m_input.resize (100); 
    m_output.resize(100); 
    for (int i = 0; i < 100; ++i) { 
     m_input [i].resize(100); 
     m_output[i].resize(100); 
     for (int j = 0; j < 100; ++j){ 
      m_input [i][j].resize(100); 
      m_output[i][j].resize(100); 
     } 
    } 

¿Cómo puedo lograr esto a través de la lista de inicialización miembro de?

+5

Si sus filas \ cols \ etc son iguales en longitud id recomendamos usar un vector como 'std :: vector m_input'; e inicialízalo como 'm_input (100 * 100 * 100);', luego accede a los elementos como 'm_input [x + y * 100 + z * 100 * 100];' –

+0

@Viktor: gracias. – Avinash

Respuesta

17

tiene un constructor que toma dos argumentos, una cantidad de elementos y un valor inicial En su caso, desea inicializar m_input con 100 copias de std::vector<std::vector<int> >, por lo que sería : m_input(100, X). Ahora, que X a su vez es un vector de 100 std::vector<int>, que a su vez contiene un centenar de enteros:

: m_input(100, std::vector<std::vector<int> >(100, std::vector<int>(100, 0)))

6
my_class::my_class() 
: m_input(100, std::vector< std::vector<int> >(100, std::vector<int>(100))) 
{ 
} 

Dicho esto, la aplicación de un campo multidimensional debe hacerse mediante la proyección en un unidimensional, como dijo Viktor en su comentario a la pregunta.

+1

Me encanta este constructor del vector :) –

+2

Eso debería ser 'std :: vector ', seguramente? – Puppy

+0

sbi: 'std :: string name =" Viktor "; assert (nombre [2] == 'k'); ' –

0

Si se puede afirmar que las dimensiones de su vector van a ser de una longitud fija, entonces por qué no usar std::array?

Por ejemplo:

std:array<std::array<std::array<int, 100>, 100>, 100>

esa manera se puede aprovechar toda la memoria que se asigna de forma contigua (como insinuado por Viktor_Sehr en los comentarios), sin los problemas de implementación adicionales de acceder a un 1- matriz dimensional en una forma tridimensional.

Cuestiones relacionadas