2015-05-29 54 views
3

最近我有机会使用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,我有兴趣在原地进行,因为我认为它很复杂。

+0

我很困惑。 'SingleNeuron'与'SomeStruct'相同吗? – Beta

+0

@Beta希望只是一个错字,否则就不可能声明它,因为类型不匹配。 – vsoftco

+0

是的..这是错字..现在更正 – user2705939

回答

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多维数组。请注意,这是非常低效的使用嵌套载体,它是非常最好使用一维平面矢量和使用3D寻址方案,即,对于大小HEIGHT x ROWS x COLS的阵列,则地址的逻辑元件[i][j][k]作为

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

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

+0

thx ..得到它..肯定会尝试一维矢量替代。如果完成,我会发布两个实现的性能 – user2705939