在声明时定义矢量矢量矢量的大小

时间:2015-05-29 03:34:07

标签: c++ vector initialization size

最近我有机会使用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并根据需要使用resizereserve,我有兴趣在原地进行此操作,因为我认为它很复杂 - 很酷。

1 个答案:

答案 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

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