2015-05-29 56 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