作者tyc5116 (累人啊....)
看板C_and_CPP
標題[語法] remove_if刪不掉元件
時間Sun Oct 25 16:34:52 2009
請問,像這樣的結構
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
1F:→ tinlans:generic algo 刪除元素還要多一次 erase。 10/25 16:42
2F:→ tinlans:被刪除的元素會被推到後面,起點就是傳回的 iterator。 10/25 16:43
3F:→ legnaleurc:所有在 algorithm 的演算法都不會刪除元素 10/25 17:45
4F:→ legnaleurc:只有呼叫該 class 的成員函式才能刪除 10/25 17:46
5F:→ tyc5116:恩~~了解,不過想問一下,lib它做成不刪除,有什麼好處嗎? 10/25 19:27
6F:→ legnaleurc:因為它不知道你要怎麼刪除 10/25 21:11
7F:→ tyc5116:不是很懂吶,刪除,不是只有一種嗎?翻過工具書,書上只有說 10/25 21:36
8F:→ tyc5116:remove_if後會變怎樣,不過不懂什麼是"不知怎樣刪除" 10/25 21:37
9F:→ legnaleurc:簡單講,你丟進去的一定是STL嗎?如果是一般陣列呢? 10/25 21:43
10F:→ tyc5116:喔...大致知道了 10/26 14:31