我试图使用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惯用法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)