在声明时定义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
并根据需要使用 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
多维数组。请注意,使用嵌套向量效率极低,最好使用 1D 平面向量并使用 3D 寻址方案,即对于大小为 HEIGHT x ROWS x COLS
的数组,您可以寻址逻辑元素 [i][j][k]
作为
[i][j][k] -> i * ROWS * COLS + j * COLS + k
这将保证您的对象连续存储,因此您的访问时间会更短。
最近我有机会使用 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
并根据需要使用 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
多维数组。请注意,使用嵌套向量效率极低,最好使用 1D 平面向量并使用 3D 寻址方案,即对于大小为 HEIGHT x ROWS x COLS
的数组,您可以寻址逻辑元素 [i][j][k]
作为
[i][j][k] -> i * ROWS * COLS + j * COLS + k
这将保证您的对象连续存储,因此您的访问时间会更短。