求教,C++STL中的list::remove_if()的用法

ggApache1_1 2012-08-29 01:16:14
list::remove_if

template <class Predicate>
void remove_if ( Predicate pred );
//按条件删除链表元素

这是函数声明,大家能给出用法示例吗?

类似的函数还有:
sort();
unique();
...全文
968 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
stecdeng 2012-08-31
  • 打赏
  • 举报
回复
msdn里面没这个用法? 不会吧
楼主可以去MSDN查查看
ggApache1_1 2012-08-29
  • 打赏
  • 举报
回复
我把楼主cyblueboy83的代码复制在remove_if_eg.cpp文件用vc++6.0调试后得到上面错误信息
mujiok2003 2012-08-29
  • 打赏
  • 举报
回复
// list::remove_if
#include <iostream>
#include <list>
using namespace std;

// a predicate implemented as a function:
bool single_digit (const int& value) { return (value<10); }

// a predicate implemented as a class:
class is_odd
{
public:
bool operator() (const int& value) {return (value%2)==1; }
};

int main ()
{
int myints[]= {15,36,7,17,20,39,4,1};
list<int> mylist (myints,myints+8); // 15 36 7 17 20 39 4 1

mylist.remove_if (single_digit); // 15 36 17 20 39

mylist.remove_if (is_odd()); // 36 20

cout << "mylist contains:";
for (list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;

return 0;
}
ggApache1_1 2012-08-29
  • 打赏
  • 举报
回复
在vc++6.0里运行出错

--------------------Configuration: remove_if_eg - Win32 Debug--------------------
Compiling...
remove_if_eg.cpp
c:\users\administrator\desktop\remove_if_eg.cpp(20) : error C2664: 'remove_if' : cannot convert parameter 1 from 'bool (const int &)' to 'class std::binder2nd<struct std::not_equal_to<int> >'
No constructor could take the source type, or constructor overload resolution was ambiguous
c:\users\administrator\desktop\remove_if_eg.cpp(22) : error C2664: 'remove_if' : cannot convert parameter 1 from 'class is_odd' to 'class std::binder2nd<struct std::not_equal_to<int> >'
No constructor could take the source type, or constructor overload resolution was ambiguous
执行 cl.exe 时出错.

remove_if_eg.obj - 1 error(s), 0 warning(s)
herman~~ 2012-08-29
  • 打赏
  • 举报
回复
// list::remove_if
#include <iostream>
#include <list>
using namespace std;

// a predicate implemented as a function:
bool single_digit (const int& value) { return (value<10); }

// a predicate implemented as a class:
class is_odd
{
public:
bool operator() (const int& value) {return (value%2)==1; }
};

int main ()
{
int myints[]= {15,36,7,17,20,39,4,1};
list<int> mylist (myints,myints+8); // 15 36 7 17 20 39 4 1

mylist.remove_if (single_digit); // 15 36 17 20 39

mylist.remove_if (is_odd()); // 36 20

cout << "mylist contains:";
for (list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;

return 0;
}
ggApache1_1 2012-08-29
  • 打赏
  • 举报
回复
我想问的是容器list的函数remove_if的用法
mujiok2003 2012-08-29
  • 打赏
  • 举报
回复
// remove_if example
#include <iostream>
#include <algorithm>
using namespace std;

bool IsOdd (int i) { return ((i%2)==1); }

int main () {
int myints[] = {1,2,3,4,5,6,7,8,9}; // 1 2 3 4 5 6 7 8 9

// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^

pend = remove_if (pbegin, pend, IsOdd); // 2 4 6 8 ? ? ? ? ?
// ^ ^
cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
cout << " " << *p;

cout << endl;

return 0;
}
冻结 2012-08-29
  • 打赏
  • 举报
回复

// unique algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool myfunction (int i, int j) {
return (i==j);
}

int main () {
int myints[] = {10,20,20,20,30,30,20,20,10}; // 10 20 20 20 30 30 20 20 10
vector<int> myvector (myints,myints+9);
vector<int>::iterator it;

// using default comparison:
it = unique (myvector.begin(), myvector.end()); // 10 20 30 20 10 ? ? ? ?
// ^

myvector.resize( it - myvector.begin() ); // 10 20 30 20 10

// using predicate comparison:
unique (myvector.begin(), myvector.end(), myfunction); // (no changes)

// print out content:
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;

cout << endl;

return 0;
}
冻结 2012-08-29
  • 打赏
  • 举报
回复

// sort algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool myfunction (int i,int j) { return (i<j); }

struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
int myints[] = {32,71,12,45,26,80,53,33};
vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33
vector<int>::iterator it;

// using default comparison (operator <):
sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33

// using function as comp
sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)

// using object as comp
sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80)

// print out content:
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;

cout << endl;

return 0;
}
冻结 2012-08-29
  • 打赏
  • 举报
回复

// remove_if example
#include <iostream>
#include <algorithm>
using namespace std;

bool IsOdd (int i) { return ((i%2)==1); }

int main () {
int myints[] = {1,2,3,4,5,6,7,8,9}; // 1 2 3 4 5 6 7 8 9

// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^

pend = remove_if (pbegin, pend, IsOdd); // 2 4 6 8 ? ? ? ? ?
// ^ ^
cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
cout << " " << *p;

cout << endl;

return 0;
}

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧