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

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

本文关键字:vector 定义 声明      更新时间:2023-10-16

最近我有机会使用vector<vector<vector<Some_Struct>>> threeFoldVec,我们必须把它推进listthreeFoldVec的大小在初始化时是已知的

我知道如何在声明时定义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多维数组。注意,使用嵌套向量效率极低,最好使用一维平面向量和3D寻址方案,即对于大小为HEIGHT x ROWS x COLS的数组,将逻辑元素[i][j][k]寻址为

[i][j][k] -> i * ROWS * COLS  + j * COLS + k

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