对象 vector 上的 C++ remove_if

标签 c++ vector stl predicate

我有一个对象 vector (顺序很重要)(我们称它们为 myobj 类),我试图一次删除多个对象。

class vectorList
{

    vector<*myobj> myList; 
};

class myobj
{

    char* myName;
    int index;
    bool m_bMarkedDelete;
}

我认为最好的方法是标记特定的 myobj 对象以进行删除,然后在 vector 上调用 myList.remove_if()。但是,我不确定如何为此使用谓词等。我是否应该在对象中创建一个成员变量,让我说我想删除 myobj,然后创建一个谓词来检查是否设置了成员变量?

如何将谓词实现为 vectorList 类的一部分?

最佳答案

Should I create a member variable in the object which allows me to say that I want to delete the myobj and then create a predicate which checks to see if the member variable was set?

你还没有这样做吗?这不是 m_bMarkedDelete 的用途吗?你可以这样写谓词:

bool IsMarkedToDelete(const myobj & o)
{
    return o.m_bMarkedDelete;
}

然后:

myList.erase(
    std::remove_if(myList.begin(), myList.end(), IsMarkedToDelete),
    myList.end());

或者,使用 lambda:

myList.erase(
    std::remove_if(myList.begin(), myList.end(),
        [](const myobj & o) { return o.m_bMarkedDelete; }),
    myList.end());

如果您的类(class)实际上没有该成员,并且您问我们是否应该这样做,那么我会拒绝。您使用什么标准来决定将其标记为删除?在您的谓词中使用相同的标准,例如:

bool IndexGreaterThanTen(const myobj & o)
{
    return o.index > 10;
}

note -- 我写的函数当然是无效的,因为你所有的成员都是私有(private)的。所以你需要一些方法来访问它们。

关于对象 vector 上的 C++ remove_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958216/

相关文章:

c++ - 指向非 union 类的指针的大小可以不同吗?

c++ - 为 ReadFile 提供有效回调的方法

eclipse - Eclipse CDT无法解析的原子类型

c++ - 使用数组添加两个大数

c++ - Gstreamer 的 OpenCV 3.0.0 错误

c++ - 为二进制搜索排序对象 vector

带N个参数的C++方法

c++ - c++ 中的 vector 这么慢吗?

c++ - 将字符串存储到 vector 中

c++ - 实例的排序 vector