我有一段代碼需要定義向量的vector
。我使用它們在一個循環的廣告來填充它每一次,片段是這樣的:清理向量元素向量
vector < vector<T> > buckets;
for (i = 0 -> N) {
buckets.clear();
....
}
我的問題是即使在bucket
執行.clear()
操作,對下一次迭代後,我看到舊的價值觀念存在,這是通常的?
在此先感謝!
我有一段代碼需要定義向量的vector
。我使用它們在一個循環的廣告來填充它每一次,片段是這樣的:清理向量元素向量
vector < vector<T> > buckets;
for (i = 0 -> N) {
buckets.clear();
....
}
我的問題是即使在bucket
執行.clear()
操作,對下一次迭代後,我看到舊的價值觀念存在,這是通常的?
在此先感謝!
clear
可能只是將「已使用的條目數量設置爲零」[1],所以舊的條目仍然可以在向量中讀取。如果您不使用size()
來獲取新的尺寸,但使用其他方法,則值仍然存在。
clear
確實可以完全刪除內容並且不再可訪問。在這種情況下,如果您嘗試使用某些內容,程序會崩潰。
[1]是的,如果你需要細節,它會比這更「多」,我正在簡化它。例如,它將析構函數稱爲向量中的元素,但它仍然只是「東西仍然存在」的情況,不再被視爲有效。
我寧願「值可能是可讀的」,而不是「值仍然存在」。類在析構函數中清除成員來防止這種情況並不罕見。 – 2013-03-06 20:40:02
好吧,編輯製作... – 2013-03-06 20:43:38
你怎麼知道任何東西仍然會在那裏,歸零或不?當我調用clear()時,我無法在標準中找到阻止實現釋放分配內存的任何內容。我錯過了什麼嗎? – us2012 2013-03-06 20:45:17
顯示你如何「看到」這些值。 – Zeta 2013-03-06 20:31:05
'for(i = 0 - > N)'無效C++ – 2013-03-06 20:38:10
您確實需要向我們展示實際的代碼。 – stefan 2013-03-06 20:43:13