[語法] 關於iterator的存取

看板C_and_CPP作者 (小嫩)時間16年前 (2009/06/18 04:11), 編輯推噓4(407)
留言11則, 4人參與, 最新討論串1/3 (看更多)
看到上列有關vector的討論串, 做了一個關於iterator的小測試 #include <vector> vector<int> p; int main() { for(int i=0;i<10;i++) p.push_back ; vector<int>::iterator it=p.begin(); while(it!=p.end()) { cout<<*it<<endl; it++; } cout<<p.capacity()<<endl; cout<<&*(it-1)<<endl; //在這邊存取it不會壞 cout<<&p[9]<<endl; p.push_back(13); cout<<&p[9]<<endl; cout<<&*(it-1)<<endl; //但push_back後再次存取就爆 } 中間印出二次&p[9], 結果值相同, 因而確認系統並沒有重新assign記憶體 而中間也沒有再變動it的值, 為什麼就會爆掉呢???? 麻煩版上大大們解惑@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.186

06/18 12:26, , 1F
記憶體重新分配後的 it-1 已經不是指向 p[9] 了
06/18 12:26, 1F

06/18 12:27, , 2F
p[9] 是在新分配的位置上,而 it-1 則還是舊的
06/18 12:27, 2F

06/18 13:34, , 3F
但我印出二次p[9],位址是一樣 這樣記憶體有重新分配嗎
06/18 13:34, 3F

06/18 16:06, , 4F
不然你重取一次 p.end() 試試
06/18 16:06, 4F

06/18 16:33, , 5F
我測試的結果也是 會盪
06/18 16:33, 5F

06/18 16:33, , 6F
不過改成release模式就不會 為什麼這種錯誤release不會壞呢?
06/18 16:33, 6F

06/18 16:35, , 7F
06/18 16:35, 7F

06/18 16:36, , 8F
我不懂 的是我註解的 it==p.end()判斷 都會盪 很詭異...
06/18 16:36, 8F

06/18 16:36, , 9F
我請別人跑 卻沒有當機的情形 這是為什麼
06/18 16:36, 9F

06/18 16:53, , 10F
幹麻堅持要拿已失效的 iterator 再抱怨會當機啊 = =
06/18 16:53, 10F

06/18 16:53, , 11F
vector 就跟你說插入或刪除元素會讓 iterator 失效了
06/18 16:53, 11F
文章代碼(AID): #1AERvn-0 (C_and_CPP)
文章代碼(AID): #1AERvn-0 (C_and_CPP)