返回信息流下面的程序运行后v的存储内容是2434,不知道std::remove_if()是怎样工作的?为什么会是这个结果,没用过STL,百度了一番还是不太明白。求教,谢谢
#include <iostream>
#include <vector>
#include<algorithm>
bool odd(int num)
{
return num%2!=0;
}
int main()
{
std::vector<int> v;
for(int i=1;i<=4;++i)
{
v.push_back(i);
}
std::remove_if(v.begin(),v.end(),odd);
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #75010同步于 2013/11/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于std::remove_if()请教
mulala
2013/11/3镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
In C++98, the behavior of this function template is equivalent to:
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator remove_if (ForwardIterator first, ForwardIterator last,
UnaryPredicate pred)
{
ForwardIterator result = first;
while (first!=last) {
if (!pred(*first)) {
*result = *first;
++result;
}
++first;
}
return result;
}
楼上正解
【 在 yaoniming3k (offer快到碗里来) 的大作中提到: 】
: In C++98, the behavior of this function template is equivalent to:
: template <class ForwardIterator, class UnaryPredicate>
: ForwardIterator remove_if (ForwardIterator first, ForwardIterator last,
: ...................
通过『我邮』发布
remove_if表示删除那些满足自定义函数的值,但是并不会主动删除,需要外部手动删除,因此这时候会用到其返回值
如iterator it = remove_if(v.begin(),v.end(),odd);
v.erase(it,v.end());
这时候再输出,就能得到结果24了
remove_if之所以这样做,是因为其只针对迭代器,并不知道容器,如list有个成员函数,remove,就能真正从list中删除。
【 在 mulala 的大作中提到: 】
: 下面的程序运行后v的存储内容是2434,不知道std::remove_if()是怎样工作的?为什么会是这个结果,没用过STL,百度了一番还是不太明白。求教,谢谢
: #include <iostream>
: #include <vector>
: ...................