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

vector<int> myVector;

并说向量中的值是这个(按此顺序):


5 9 2 8 0 7

如果我想删除包含“ 8”值的元素,我想我会这样做:


myVector.erase(myVector.begin()+4);

因为那样会删除第四个元素。但是,是否有任何方法可以基于值“ 8”擦除元素?喜欢:


myVector.eraseElementWhoseValueIs(8);

还是只需要遍历所有矢量元素并测试其值?


拉丁的传说
浏览 438回答 3
3回答

慕妹3146593

怎么样std::remove():#include <algorithm>...vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());这种组合也称为擦除删除惯用语。

慕盖茨4494581

您可以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&nbsp; &nbsp; myVector.erase(position);

拉莫斯之舞

您不能直接这样做。您需要使用std::remove算法将要擦除的元素移动到向量的末尾,然后使用erase函数。类似于:myVector.erase(std::remove(myVector.begin(), myVector.end(), 8), myVec.end());。有关更多详细信息,请参见矢量中的此擦除元素。
打开App,查看更多内容
随时随地看视频慕课网APP