我有一个对象 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/