关于STL中的仿函数使用 10

#include<iostream>#include<list>#include<algorithm>usingnamespacestd;classNth{private... #include <iostream>
#include <list>
#include <algorithm>
using namespace std;
class Nth
{
private:
int nth;
int count;
public:
Nth(int n):nth(n),count(0)
{

}
bool operator()(int)
{
return ++count==nth;
}
protected:

};

void myout(list<int>& lt)
{
list<int>::iterator it;
for (it =lt.begin();it!=lt.end();it++)
{
cout<<*it<<", ";
}
cout<<endl;
}

void main()
{
list<int> col;
int array[9]={1,2,3,4,5,6,7,8,9};
for (int i=1;i<9;i++)
{
col.push_back(i);
}
myout(col);
list<int>::iterator pos;
pos=remove_if(col.begin(),col.end(),Nth(3));
col.erase(pos,col.end());
myout(col);
cin.get();
}

仿函数中的循环具体怎么实现,我调试运行了一下,发现count的值改变是
0,1,2,0,1,2,3,4 请问这是怎么回事?
展开
 我来答
wwwgmc
2014-08-13 · TA获得超过321个赞
知道小有建树答主
回答量:247
采纳率:0%
帮助的人:171万
展开全部
template<class _FwdIt,
class _Pr> inline
_FwdIt remove_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
{ // remove each satisfying _Pred
_First = _STD find_if(_First, _Last, _Pred);//此处_Pred=Nth(3)。查找第一个符合条件的元素 count变化0,1,2
if (_First == _Last)
return (_First); // empty sequence, all done
else
return (_Rechecked(_First,
_Remove_if(_Unchecked(_First), _Unchecked(_Last), _Pred)));//此处_Pred=Nth(3)。从第一个符合条件的元素开始遍历,并删除符合条件的元素, count变化0,1,2,3,4
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式