为了账号安全,请及时绑定邮箱和手机立即绑定

C ++通过值而不是位置擦除矢量元素?

C ++通过值而不是位置擦除矢量元素?

C++
慕的地10843 2019-12-10 13:08:03
vector<int> myVector;并说向量中的值是这个(按此顺序):5 9 2 8 0 7如果我想删除包含“ 8”值的元素,我想我会这样做:myVector.erase(myVector.begin()+4);因为那样会删除第四个元素。但是,是否有任何方法可以基于值“ 8”擦除元素?喜欢:myVector.eraseElementWhoseValueIs(8);还是只需要遍历所有矢量元素并测试其值?
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

怎么样std::remove():


#include <algorithm>

...

vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());

这种组合也称为擦除删除惯用语。



查看完整回答
反对 回复 2019-12-11
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您可以std::find用来获取值的迭代器:


#include <algorithm>

std::vector<int>::iterator position = std::find(myVector.begin(), myVector.end(), 8);

if (position != myVector.end()) // == myVector.end() means the element was not found

    myVector.erase(position);



查看完整回答
反对 回复 2019-12-11
?
DIEA

TA贡献1820条经验 获得超2个赞

您不能直接这样做。您需要使用std::remove算法将要擦除的元素移动到向量的末尾,然后使用erase函数。类似于:myVector.erase(std::remove(myVector.begin(), myVector.end(), 8), myVec.end());。有关更多详细信息,请参见矢量中的此擦除元素。

查看完整回答
反对 回复 2019-12-11
  • 3 回答
  • 0 关注
  • 338 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信