首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >erase_if在哪?

erase_if在哪?
EN

Stack Overflow用户
提问于 2010-08-06 22:56:12
回答 7查看 15.2K关注 0票数 21

我有一个容器,想要擦除基于谓词的元素。erase_if听起来很熟悉,但我在C++中找不到它。它的名称是什么?它是在哪里定义的?我想把它和VS10中的lambda一起使用。

EN

回答 7

Stack Overflow用户

发布于 2010-08-06 23:07:52

您可能正在寻找std::remove_if,其模式如下:

代码语言:javascript
复制
vec.erase(std::remove_if(vec.begin(), vec.end(), predicate), vec.end());
票数 31
EN

Stack Overflow用户

发布于 2017-05-15 20:53:26

它在Library Fundamentals v2中,很快就会在C++20中。

票数 12
EN

Stack Overflow用户

发布于 2010-08-06 23:19:59

我猜您正在考虑remove_if,它接受一个谓词来确定元素是否应该被删除。

remove_if返回一个迭代器,指向容器中要删除的元素的开头。要实际删除它们,您需要使用erase

代码语言:javascript
复制
container.erase(remove_if(container.start(), container.end(), pred), container.end())

可能是这样,也可能是您错误地回忆了copy_if算法?它不知何故被遗漏在标准之外,但却被写在--并在Effective STL中实现--。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3424962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档