c – 使用erase-remove_if惯用法

c – 使用erase-remove_if惯用法,第1张

概述假设我有std :: vector< std :: pair< int,Direction>>. 我试图使用erase-remove_if成语从向量中删除对. stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), 假设我有std :: vector< std :: pair< int,Direction>>.

我试图使用erase-remove_if成语从向量中删除对.

stopPoints.erase(std::remove_if(stopPoints.begin(),stopPoints.end(),[&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));

我想删除所有将.first值设置为4的对.

在我的例子中,我有成对:

- 4,Up- 4,Down- 2,Up- 6,Up

但是,在执行erase-remove_if后,我留下:

- 2,Up

我在这做错了什么?

解决方法 正确的代码是:
stopPoints.erase(std::remove_if(stopPoints.begin(),[&](const stopPointPair stopPoint)-> bool                                        { return stopPoint.first == 4; }),stopPoints.end());

您需要从从std :: remove_if返回的迭代器开始到向量的末尾删除范围,而不仅仅是单个元素.

“为什么?”

> std :: remove_if在向量内部交换元素,以便将与谓词不匹配的所有元素放到容器的开头.

>然后返回指向第一个谓词匹配元素的迭代器.
> std :: vector :: erase需要擦除从返回的迭代器开始到向量末尾的范围,以便删除与谓词匹配的所有元素.

更多信息:Erase-remove idiom (Wikipedia).

总结

以上是内存溢出为你收集整理的c – 使用erase-remove_if惯用法全部内容,希望文章能够帮你解决c – 使用erase-remove_if惯用法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236650.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存