2011-06-27 15 views
9

Mam następujący std::vector deklarację:Wielowymiarowe wektor inicjujący

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

ja inicjowanie go w następujący sposób:

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); 
     } 
    } 

W jaki sposób można to osiągnąć poprzez listę inicjatora członkiem?

+5

Jeśli twoje wiersze \ cols \ etc mają równą długość id, zalecamy użycie wektora jako 'std :: vector m_input'; i zainicjuj go jako 'm_input (100 * 100 * 100) ;, następnie dostęp do elementów jako' m_input [x + y * 100 + z * 100 * 100]; ' –

+0

@Viktor: thanks. – Avinash

Odpowiedz

17

std::vector<T> ma konstruktor, który pobiera dwa argumenty, liczbę elementów i wartość początkową. W twoim przypadku chcesz zainicjować m_input z 100 kopiami std::vector<std::vector<int> >, więc będzie to : m_input(100, X). Teraz, że X z kolei jest wektorem 100 std::vector<int>, który z kolei zawiera sto ints:

: 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))) 
{ 
} 

Powiedział, że wdrożenie pole wielowymiarowe powinny być wykonywane przez wystającą do jednowymiarowej jednej, jak Wiktor powiedział w swoim komentarzu na pytanie.

+1

Uwielbiam tego konstruktora wektora :) –

+2

To powinno być 'std :: vector ', z pewnością? – Puppy

+0

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

0

Jeśli można stwierdzić, że wymiary wektorowe będą o stałej długości, to dlaczego nie użyć std::array?

Na przykład:

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

ten sposób można skorzystać z całej przydzielonej pamięci jest zwarty (jak zasugerował przez Viktor_Sehr w komentarzach), bez dodanych nieszczęść implementacji dostępu do 1- wymiarowa tablica w trójwymiarowy sposób.