作者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