2014-03-24 49 views
1
std::vector<Card> m_vector; 
m_vector.resize(10); 

所以我有類似的設置,我初始化存儲容量爲10的向量。但是,當我的程序啓動時,我將只有2個元素來處理,並且以後會以不固定的比率增加。C++發現向量中的元素的實際數量

m_vector.size() 

將返回10,使我很難做一個循環。有沒有辦法找出矢量內的元素的實際數量?

回答

3

reserve是什麼「爲10的存儲容量向量」:

m_vector.reserve(10); 

這將確保病媒的內部存儲空間大到足以容納沒有10元需要進一步重新分配。

resize另一方面確保矢量包含10個元素。它根據需要插入空元素 - 這也是size()調用返回10的原因。

12

元素resize(10)後的金額爲 10.你不希望使用resize如果你只需要兩個元素和爲10的容量,而不是,你想:

std::vector<Card> m_vector(2); // two elements 
m_vector.reserve(10);   // space for 10 without reallocation 

您可以使用size()來查詢當前的元素數量,並且capacity()可以在沒有重新分配的情況下獲得最大大小。

+0

很酷謝謝,正是我所需要的。 – user2963379

+0

另一個問題,因爲我在我的頭文件中聲明瞭矢量,我將如何在我的源文件中啓動它? – user2963379

+1

@ user2963379:顯示代碼。最好在一個單獨的問題中做到這一點(我預測它將被解釋爲解釋構造函數初始化程序列表的其他問題的副本)。 –