[語法] remove_if刪不掉元件

看板C_and_CPP (C/C++)作者 (累人啊....)時間16年前 (2009/10/25 16:34), 編輯推噓0(0010)
留言10則, 3人參與, 最新討論串1/1
請問,像這樣的結構 class a{ public: a(int vID):ID(vID){} int ID; bool operator==(const a& va)const{return ID==va.ID;} }; class Tru_a{ public: list<a> Load; void add(a new_a){Load.push_back(new_a);} a GetNowOB(int vID){ list<a>::iterator cviter= find_if( Load.begin(),Load.end(),FindOBByID(vID)); return *cviter; } void del(int vID){ a b=GetNowOB(vID); Load.remove(b); //remove_if(Load.begin(),Load.end(),FindOBByID(vID)); } class FindOBByID{ public: FindOBByID (int val):_value(val){} bool operator()(a& lhs){ return (lhs.ID == _value);} int _value; }; }; 在del的那個函數中,若把黃色程式碼註解掉,用紫色的,就無法刪掉元件 若用黃色的則可刪除,黃色的為什麼刪得掉我想我能理解 但紫色的部份是為什麼呢?麻煩回答,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28

10/25 16:42, , 1F
generic algo 刪除元素還要多一次 erase。
10/25 16:42, 1F

10/25 16:43, , 2F
被刪除的元素會被推到後面,起點就是傳回的 iterator。
10/25 16:43, 2F

10/25 17:45, , 3F
所有在 algorithm 的演算法都不會刪除元素
10/25 17:45, 3F

10/25 17:46, , 4F
只有呼叫該 class 的成員函式才能刪除
10/25 17:46, 4F

10/25 19:27, , 5F
恩~~了解,不過想問一下,lib它做成不刪除,有什麼好處嗎?
10/25 19:27, 5F

10/25 21:11, , 6F
因為它不知道你要怎麼刪除
10/25 21:11, 6F

10/25 21:36, , 7F
不是很懂吶,刪除,不是只有一種嗎?翻過工具書,書上只有說
10/25 21:36, 7F

10/25 21:37, , 8F
remove_if後會變怎樣,不過不懂什麼是"不知怎樣刪除"
10/25 21:37, 8F

10/25 21:43, , 9F
簡單講,你丟進去的一定是STL嗎?如果是一般陣列呢?
10/25 21:43, 9F

10/26 14:31, , 10F
喔...大致知道了
10/26 14:31, 10F
文章代碼(AID): #1Av0skRC (C_and_CPP)
文章代碼(AID): #1Av0skRC (C_and_CPP)