[問題] vector容器裡erase的問題

看板C_and_CPP (C/C++)作者 (meteor007)時間15年前 (2010/12/14 15:55), 編輯推噓7(708)
留言15則, 6人參與, 最新討論串1/1
我是用VC++2005 作練習 我的需求是 步驟一:要建立一個vector並輸入1~20的數字 步驟二:建立完後再從1~20一個一個刪除 有點蠢的練習XD 步驟一的code: vector<int> foo(20); vector<int>::iterator itr; int n =1; for (itr=foo.begin();itr!=foo.end();itr++) { *itr=n++; } 到這邊沒問題 但是步驟二: vector<int>::iterator iii; for (iii=foo.begin();iii!=foo.end();iii++) { foo.erase(iii); } 執行值會當機 也就是當erase第一個值後就當了 想請問是為什麼?? 及如何解決?? 謝謝指教 -- 賺錢才是真的 努力讀書只是晚幾年去賣雞排罷了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.121.37 ※ 編輯: meteor007 來自: 140.123.121.37 (12/14 15:56)

12/14 16:00, , 1F
foo.erase(); 處理完後 注意指標位置 這有個名詞我找找..
12/14 16:00, 1F

12/14 16:00, , 2F
去掉iii++, 改用 iii = your_vector_obj.erase(iii);
12/14 16:00, 2F

12/14 16:08, , 3F
12/14 16:08, 3F

12/14 16:10, , 4F
erase 會回傳一個迭代器, 指向被解構最後元素的下一個
12/14 16:10, 4F

12/14 16:11, , 5F
元素, 當有erase之類的函式呼叫, 所有之前記起來的迭
12/14 16:11, 5F

12/14 16:12, , 6F
代器都可能會失效(因為重配置記憶體的關係), 所以你會
12/14 16:12, 6F

12/14 16:12, , 7F
需要他的回傳值來告訴你的有效迭代器值
12/14 16:12, 7F

12/14 16:15, , 8F
感謝解答 我先研究看看
12/14 16:15, 8F

12/14 16:35, , 9F
原因清楚了 但是如果硬要用erase的話該如何做?
12/14 16:35, 9F

12/14 16:36, , 10F
其實我已經找到別的方法 但是還是想用erase做看看..
12/14 16:36, 10F

12/14 16:37, , 11F
想賺大錢的, 早點去賣雞排唄
12/14 16:37, 11F

12/14 16:42, , 12F

12/14 16:44, , 13F
第10行修改: int → unsigned
12/14 16:44, 13F

12/14 16:46, , 14F
感謝樓上 看懂了
12/14 16:46, 14F

12/14 16:50, , 15F
雞排跟飲料攤市場已經飽滿,志願役或公務員吧
12/14 16:50, 15F
文章代碼(AID): #1D1oBpib (C_and_CPP)
文章代碼(AID): #1D1oBpib (C_and_CPP)