#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);
10
你不能直接这样做 . 您需要使用 std::remove 算法将要擦除的元素移动到向量的末尾,然后使用 erase 函数 . 类似的东西: myVector.erase(std::remove(myVector.begin(), myVector.end(), 8), myVec.end()); . 有关详细信息,请参阅erasing elements from vector .
0
Eric Niebler正在研究范围提案,而examples则展示了如何删除某些元素 . 删除8.是否创建新矢量 .
#include <iostream>
#include <range/v3/all.hpp>
int main(int argc, char const *argv[])
{
std::vector<int> vi{2,4,6,8,10};
for (auto& i : vi) {
std::cout << i << std::endl;
}
std::cout << "-----" << std::endl;
std::vector<int> vim = vi | ranges::view::remove_if([](int i){return i == 8;});
for (auto& i : vim) {
std::cout << i << std::endl;
}
return 0;
}
4 回答
相反如何std::remove():
这种组合也称为erase-remove idiom .
您可以使用
std::find
获取值的迭代器:你不能直接这样做 . 您需要使用
std::remove
算法将要擦除的元素移动到向量的末尾,然后使用erase
函数 . 类似的东西:myVector.erase(std::remove(myVector.begin(), myVector.end(), 8), myVec.end());
. 有关详细信息,请参阅erasing elements from vector .Eric Niebler正在研究范围提案,而examples则展示了如何删除某些元素 . 删除8.是否创建新矢量 .
输出