从容器中删除元素的单语句方法

发布于 2024-07-08 22:17:18 字数 148 浏览 11 评论 0原文

是否有一个算法可以像下面的代码一样从容器中删除元素?

vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );

Is there a single algorithm that removes elements from a container as happens in the following code?

vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

唯憾梦倾城 2024-07-15 22:17:18

惯用的做法就像贾尔夫所说的那样。 您可以构建自己的函数来更轻松地做到这一点:

template<typename T, typename Pred> void erase_if(T &vec, Pred pred)
{
    vec.erase(std::remove_if(vec.begin(), vec.end(), pred), vec.end());
}

所以您可以使用

std::vector<int> myVec;
// (...) fill the vector. (...)
erase_if(myVec, myPred);

The idiomatic way to do it is like jalf has said. You can build your own function to do that more easily:

template<typename T, typename Pred> void erase_if(T &vec, Pred pred)
{
    vec.erase(std::remove_if(vec.begin(), vec.end(), pred), vec.end());
}

So you can use

std::vector<int> myVec;
// (...) fill the vector. (...)
erase_if(myVec, myPred);
心如荒岛 2024-07-15 22:17:18

你的意思是这样吗?

vec.erase( std::remove_if( vec.begin(), vec.end(), pred ), vec.end() );

这是惯用的做法。

You mean like this?

vec.erase( std::remove_if( vec.begin(), vec.end(), pred ), vec.end() );

That's the idiomatic way to do it.

痕至 2024-07-15 22:17:18

我不知道。 也许有。 但如果有的话,那么这将是一个地狱般的声明。 没有人能够理解或维护它。 如果这两行符合您的要求,请坚持使用它们。 他们非常好。

I don't know. Maybe there is. But if there is, then it will be a hell of a statement. Nobody will be able to understand or maintain it. If those two lines do what you want, just stick with them. They are perfectly good.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文