在声明时定义vector of vector of vector的大小

Define size of vector of vector of vector at the time of declaration

最近我有机会使用 vector<vector<vector<Some_Struct>>> threeFoldVec, 我们不得不将其推入 list。大小 threeFoldVec 在初始化时已知。

我知道如何在声明时定义 2_fold 向量的大小。

std::vector<std::vector<SomeStruct>> Layer_1(10, std::vector<SomeStruct>(5));

但是说到 3_fold 向量,我很困惑。

std::vector<std::vector<std::vector<SomeStruct>>> 
                       Layer_1(10, std::vector<std::vector<SomeStruct>>(10));

这样我就可以上二次元了。我显然可以遍历 Layer_1 并根据需要使用 resizereserve,我有兴趣就地进行,只是因为我认为它很复杂。

你可以这样做:

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

这将保证您的对象连续存储,因此您的访问时间会更短。