我有以下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);
}
}
如何通过成员初始化列表实现此目的?
答案 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维数组的实现困境。