作者dreamboat66 (小嫩)
看板C_and_CPP
標題[語法] 關於iterator的存取
時間Thu Jun 18 12:11:28 2009
看到上列有關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
推 avhacker:記憶體重新分配後的 it-1 已經不是指向 p[9] 了 06/18 12:26
→ avhacker:p[9] 是在新分配的位置上,而 it-1 則還是舊的 06/18 12:27
→ dreamboat66:但我印出二次p[9],位址是一樣 這樣記憶體有重新分配嗎 06/18 13:34
推 avhacker:不然你重取一次 p.end() 試試 06/18 16:06
推 QQ29:我測試的結果也是 會盪 06/18 16:33
→ QQ29:不過改成release模式就不會 為什麼這種錯誤release不會壞呢? 06/18 16:33
→ QQ29:我不懂 的是我註解的 it==p.end()判斷 都會盪 很詭異... 06/18 16:36
→ QQ29:我請別人跑 卻沒有當機的情形 這是為什麼 06/18 16:36
推 legnaleurc:幹麻堅持要拿已失效的 iterator 再抱怨會當機啊 = = 06/18 16:53
→ legnaleurc:vector 就跟你說插入或刪除元素會讓 iterator 失效了 06/18 16:53