在声明时定义vector的vector的大小
Posted
技术标签:
【中文标题】在声明时定义vector的vector的大小【英文标题】:Define size of vector of vector of vector at the time of declaration 【发布时间】:2015-05-29 03:34:07 【问题描述】:最近我有机会使用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
,我有兴趣在原地执行它,只是因为我认为它很复杂。
【问题讨论】:
我也很困惑。SingleNeuron
和 SomeStruct
一样吗?
@Beta 希望只是一个错字,否则无法声明它,因为类型不匹配。
是的..这是错字..现在更正了
【参考方案1】:
你可以这样做:
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
这将保证您的对象连续存储,因此您的访问时间会更好。
【讨论】:
thx.. 明白了.. 肯定会尝试一维矢量替代方案。如果完成,我将发布两种实现的性能以上是关于在声明时定义vector的vector的大小的主要内容,如果未能解决你的问题,请参考以下文章