我想使用
从std :: vector v中删除一个元素v.erase( std::remove_if( std::begin(v), std::end(v), pred), std::end(v) );
我知道可移动元素(如果存在)它必须位于index1和index2之间。有没有办法在remove_if?
中使用这些信息答案 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 );