c++ - erase-remove 习语 : did I just delete something?

标签 c++ std stdvector

我正在使用 erase-remove 习语:

template <typename T>
bool garbageCollectVector(std::vector<T>& v) {
    // Use the erase-remove idiom in combination with a lambda expression
    v.erase(
        std::remove_if(v.begin(), v.end(),
            [this](const T& elem) -> bool {
                return this->shouldRemove(elem);
            }
        ),
        v.end());
    return /* what to return? */;
}

并希望返回该方法是否实际删除了任何元素。什么是最干净的方法?

最佳答案

除了大小检查,您还可以拆分您的实现:

template <typename T>
bool garbageCollectVector(std::vector<T>& v) {
    // Use the erase-remove idiom in combination with a lambda expression
    auto it = std::remove_if(v.begin(), v.end(),
                             [this](const T& elem) -> bool {
                                return this->shouldRemove(elem);
                             });
    if (it == v.end()) {
        return false;
    } else {
        v.erase(it, v.end());
        return true;
    }
}

关于c++ - erase-remove 习语 : did I just delete something?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30749520/

相关文章:

C++ 语法我不明白

c++ - 为什么定义了移动构造函数而隐式删除了赋值运算符?

c++ - 这是包含源文件的好习惯吗?

c - fread() 返回零字节读取 : I Don't Understand Why

c++ - C++17 之前的类模板参数推导

c++ - Microsoft header 对声明没有评论,那么文档在哪里?

c++ - 类定义中的 bad_alloc 错误

STL - std::vector::data() 的状态是什么?

c++ - 如何在重复循环中遍历 std::vector

c++ - vector<T> 的内存结构