从std :: vector中删除元素

时间:2014-03-29 19:36:06

标签: c++ std

我想使用

从std :: vector v中删除一个元素
v.erase( std::remove_if( std::begin(v), std::end(v), pred), std::end(v) );

我知道可移动元素(如果存在)它必须位于index1和index2之间。有没有办法在remove_if?

中使用这些信息

3 个答案:

答案 0 :(得分:3)

如果只有一个要删除的元素,那么似乎要使用std::find_if()而不是std::remove_if()并找到特定范围内的对象:

auto it = std::find_if(v.begin() + index1, v.begin() + index2, pred);
if (it != v.begin() + index2) {
    v.erase(it);
}

如果可能有更多元素可以使用

v.erase(std::remove_if(v.begin() + index1, v.begin() + index2, pred), v.begin() + index2);

您可以使用v.erase()删除内部范围内的元素。

答案 1 :(得分:0)

这只会在index1和index2之间进行搜索,不包括任何一个索引。由您决定确保范围仍然有效。

v.erase( std::remove_if( std::begin(v) + index1 + 1, std::begin(v) + index2, pred), v.begin() + index2);

答案 2 :(得分:0)

v.erase( std::remove_if( std::begin(v) + index1, std::begin(v) + index2, pred), std::begin(v) + index2 );