擦除_if在哪里?
我有一个容器,想根据谓词删除元素。 erase_if
听起来很熟悉,但我在 C++ 中找不到它。它的名称是什么以及在哪里定义的? 我想在 VS10 中将它与 lambda 一起使用。
I've got a container and would like to erase elements based on a predicate. erase_if
sounds familiar, but I can't find it in C++. What's the name and where is it defined?
I'd like to use it with a lambda in VS10.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
它位于 Library Fundamentals v2 中,很快就会出现在C++20。
It's in Library Fundamentals v2, and soon in C++20.
MSVC 尚未实现 P1209R0 因此,作为一种解决方法,您可以将特定容器的实现从该论文的某处复制到您的代码中。 GCC 9.1 和 Clang 9.0 已经有了它。
MSVC does not yet implement C++20's
std::erase_if
from P1209R0 so, as a workaround, you can just copy the implementation for specific container from that paper somewhere to your code. GCC 9.1 and Clang 9.0 already have it.我猜您正在考虑
remove_if
采用谓词来确定是否应该删除该元素。remove_if
返回一个迭代器,该迭代器指向容器中要删除的元素的开头。要真正删除它们,您需要使用erase
:要么是这样,要么您错误地回忆了
copy_if
算法?它以某种方式被排除在标准之外,但在 Effective STL 中编写并实现。I'm guessing you're thinking of
remove_if
which takes a predicate to determine if the element ought to be removed.remove_if
returns an iterator pointing to the beginning of the elements to remove in the container. To actually remove them you need to useerase
:Either that or perhaps you mistakenly recalled the
copy_if
algorithm? Which somehow got left out of the standard but was written about - and implemented - in Effective STL.实际上,Boost 库中存在一个名为
erase_if
的方法,用于 指针容器。Actually there exists a method called
erase_if
in the Boost library for pointer containers.对于新的 C++ 20 格式,您可以像这样使用它:
指向参考的链接。
With the new C++ 20 format you can use it like this:
Link to the reference.
有一个
list::remove_if
,但不适用于所有容器类。remove_if
也作为一种算法存在,它可以与从begin()
和end()
获取的迭代器一起使用。There is a
list::remove_if
, but not for all container classes.remove_if
also exists as a algorithm, which can be used with the iterators you can get frombegin()
andend()
.您可能正在寻找
std::remove_if
,采用如下模式:You're probably looking for
std::remove_if
, in a pattern such as: