2015-03-02 151 views
0

我想要一個創建未定數量的列表的程序。每個列表的大小是固定的,但是我不能在編譯時確定需要多少個列表。靜態數組的動態數組

我明白我不能創建數組的一個載體。我也明白我可以使用矢量矢量,但是我想知道這是否是最有效的方法,考慮到每次需要新數組時都需要保留固定數量的內存。

+2

固定長度和靜態不是一回事。 – 2015-03-02 09:55:27

+0

Ahm ...但固定長度允許你創建靜態數組,而非固定不能,是嗎? – D1X 2015-03-02 10:00:46

+0

你應該將自己的列表數據類型封裝在自己的類中,*和*使用'std :: array'作爲其底層存儲。如果你不能使用C++ 11,那麼最好使用矢量而不是傳統的C數組。任何業績損失可能都是微不足道的。 – 2015-03-02 10:04:23

回答

5

呃,你可以使用數組的載體,例如,

std::vector<std::array<T, N>> some_vec; 
+0

這解決了我的問題。請問矢量',64 >>'創建一個2x64元素的向量? – D1X 2015-03-02 10:08:47

+1

@ D1X是,則宣告尺寸64的陣列的向量,其中每個數組項是兩個整數數組,如果這是你所追求的.. – Nim 2015-03-02 10:20:21

+0

還有一個問題:假設我已經聲明'矢量<陣列< array ,64 >> sol',我想將棧stack lifo'複製到矢量_sol_中的第一個元素。它是否正確? '溶膠[0] = LIFO;' – D1X 2015-03-02 14:06:21

2

@Nim是正確的,但我不能給予好評尚未:P 也是他的解決方案是C++ 11。

另一種替代方法將被優先於std::vector<std::vector<T> >是具有與尺寸X * Y.一個矢量然後就可以用v訪問自己的元素[Y * Y + X];

這適用於C++的所有版本,應該是一樣的std::vector<std::array<T, N> >解決方案高效。

+1

好吧,用'boost :: array <>'然後! ;) – Nim 2015-03-02 10:17:24

+0

如果已經使用boost,那麼是的。但我不會需要提升只是爲了;-)但是,提升很酷:-) – 2015-03-02 10:24:29