最近我有机会使用 vector<vector<vector<Some_Struct>>> threeFoldVec
,
我们不得不将其插入 list
.尺寸threeFoldVec
在初始化时已知。
我知道如何在声明时定义 2_fold vector 的大小。
std::vector<std::vector<SomeStruct>> Layer_1(10, std::vector<SomeStruct>(5));
但是当谈到 3_fold vector 时,我很困惑。
std::vector<std::vector<std::vector<SomeStruct>>>
Layer_1(10, std::vector<std::vector<SomeStruct>>(10));
这样我就可以进入第二维度了。我显然可以遍历 Layer_1
并使用 resize
或 reserve
根据需要,我有兴趣就地进行,只是因为我认为它很复杂很酷。
最佳答案
你可以这样做:
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
多维数组。请注意,使用嵌套 vector 的效率极低,最好使用 1D 平面 vector 并使用 3D 寻址方案,即对于大小为 HEIGHT x ROWS x COLS
的数组,您可以解决逻辑元素[i][j][k]
as
[i][j][k] -> i * ROWS * COLS + j * COLS + k
这将保证您的对象连续存储,因此您的访问时间会更好。
关于c++ - 在声明时定义vector of vector of vector的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520673/