最近我有机会使用vector<vector<vector<Some_Struct>>> threeFoldVec
,
我们不得不将其推入list
。大小threeFoldVec
在初始化时已知。
我知道如何在声明时定义2_fold向量的大小。
std::vector<std::vector<SomeStruct>> Layer_1(10, std::vector<SomeStruct>(5));
但是当谈到3倍矢量时,我很困惑。
std::vector<std::vector<std::vector<SomeStruct>>>
Layer_1(10, std::vector<std::vector<SomeStruct>>(10));
这样我可以进入第二维度。我显然可以循环浏览Layer_1
并根据需要使用resize
或reserve
,我有兴趣在原地进行此操作,因为我认为它很复杂 - 很酷。
答案 0 :(得分:3)
你可以这样做:
std::vector<std::vector<std::vector< SomeStruct >>>
Layer_1(10, std::vector<std::vector< SomeStruct >>(20, std::vector< SomeStruct >(30)));
这将创建一个10 x 20 x 30
多维数组。请注意,使用嵌套向量效率非常低,使用1D平面向量并使用3D寻址方案要好得多,即对于大小为HEIGHT x ROWS x COLS
的数组,可以解决逻辑元素[i][j][k]
如
[i][j][k] -> i * ROWS * COLS + j * COLS + k
这将保证您的对象连续存储,因此您的访问时间会更好。