多维矢量初始化

时间:2011-06-27 10:00:42

标签: c++ stl vector initialization

我有以下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);
        }
    }

如何通过成员初始化列表实现此目的?

3 个答案:

答案 0 :(得分: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)))

答案 1 :(得分:6)

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

也就是说,如Viktor在对该问题的评论中所说,实施多维场应该通过投射到一维场来完成。

答案 2 :(得分:0)

如果您可以断言您的矢量尺寸是固定长度的,那么为什么不使用std::array

例如:

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

通过这种方式,您可以利用连续分配的所有内存(在评论中由Viktor_Sehr暗示),而不会增加以三维方式访问1维数组的实现困境。