2011-06-27 156 views
9

我有以下std::vector声明:多维向量初始化

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

我对其进行初始化,如下所示:

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

我如何通过成员初始化列表实现这一目标?

+5

如果你的rows \ cols \ etc的长度相等,建议使用一个向量作为'std :: vector m_input';并将其初始化为'm_input(100 * 100 * 100);',然后将元素作为'm_input [x + y * 100 + z * 100 * 100];' –

+0

@Viktor:谢谢。 – Avinash

回答

17

std::vector<T>有一个构造函数,它有两个参数,一些元素和一个初始值。在你的情况下,你想初始化m_input 100份的std::vector<std::vector<int> >,所以它会是: m_input(100, X)。现在,又是X是100 std::vector<int>一个载体,又包含一百个整数:

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

这就是说,实施多维领域应该由伸入一维之一来完成,如维克多在他的问题评论说。

+1

我爱这个矢量的构造函数:) –

+2

这应该是'std :: vector ',当然? – Puppy

+0

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

0

如果可以断言,你的载体尺寸将是一个固定长度的,那么为什么不使用std::array

例如:

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

这样,你可以采取一切被连续分配(如在评论暗示由Viktor_Sehr)内存的优势,而无需访问1-增加执行困境三维阵列。