删除-删除_惯用法-是否删除了任何内容?

Bra*_*rad 2 c++ algorithm idioms function std

我正在创建一个API,用户将调用该API从内部向量中删除项目。他们将传递条件以在向量中搜索要删除的元素。我希望我的API为找到和删除任何元素返回一个布尔值。

我打算使用“ 擦除删除”惯用语来使事情简单高效。我看不出有明显的方法可以立即检测到是否已删除项目?在删除并比较值之前,是否最好在向量中存储元素数量?

以下是此习语中的一些(未经测试的)示例代码:

std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

boolean removeMultiples(int multiple) {
    v.erase( std::remove_if(v.begin(), v.end(), [multiple](int i){return i%multiple == 0;}), v.end() );
    // return true if anything was removed
}
Run Code Online (Sandbox Code Playgroud)

Fat*_*KIR 5

一种想法是存储的返回值std::remove_if,并end()在进行erase类似操作之前将其与容器迭代器进行比较:

bool removeMultiples(int multiple)
{
    auto it = std::remove_if(v.begin(), v.end(), [multiple](int i){return i%multiple == 0;});
    bool any_change = it != v.end();
    v.erase(it, v.end());
    return any_change;
}
Run Code Online (Sandbox Code Playgroud)