2012-08-10 195 views
3

保留記憶我讀了關於計算器這個話題很多問題。但是,我無法在其中找到我的答案。因此,這個問題。矢量的矢量,C++

vector< vector<int> > temp 

我可以爲外部向量保留內存:

temp.reserve(20); 

現在,我想保留記憶裏每個向量。我可以這樣做:

temp[i].reserve(500); 

但是,如果我使用temp.clear();那麼temp的容量保持爲20. 但是,現在如果我用20個內部向量初始化臨時向量,則這些內部向量的容量將重置爲0(根據VS2010 Intellisense)。

我的問題:

  1. 我怎麼能後保留的500內部矢量能力我清楚,並重新初始化外載體?

  2. 我使用OpenCV的findContours功能。該函數清除外部矢量並用新的內部矢量集填充它。這個函數是否會導致釋放和重新分配內存?

+3

當你調用clear()時,所有的內部向量都被銷燬。如果你想保留它們的容量,你必須爲每個內部向量調用clear()。 – VoidStar 2012-08-10 01:40:16

+0

它甚至保證'std :: vector :: clear'保留保留的容量嗎? – jamesdlin 2012-08-10 01:54:46

+0

是的,分配的內存沒有被釋放,只有元素被破壞,大小爲0 – VoidStar 2012-08-10 02:04:23

回答

1

1)你不能在C++中。按定義清除外部矢量會破壞內部矢量,釋放所有內存。

2)如果它清除外矢量並重新創建它,那麼是它使解除分配隨後的分配。

不幸的是,我不能讓你的根本問題是什麼,所以我不能提供關於可能的解決方案更多的幫助。

編輯:你總是可以有外是(可能智能)指針內矢量存儲在/從池中檢索的載體。然後當outer被清除時,只有指針本身被清除,並且彙集的內部向量仍然存在。

+0

感謝您的回答。我特別關注清除和重新創建外部向量的方法,並防止重新分配內部向量內存。但是,我不能在C++中實現這一點 – 2012-08-10 17:02:21