我在寻找从指针 vector 中删除值的方法时遇到了一些麻烦。
我有一个 vector std::vect<MyClass*> myVect
其中包含指向对象的指针 o1, o2,...
按特定顺序。我很难找到如何删除一个特定对象的条目,例如 o1
我试过了
void remove(MyClass C)
{
myVect.erase( std::find_if( myVect.begin(), myVect.end(), [&](MyClass* W)
{return &C == W;} ) );
}
但我的 bool lambda 从未返回 true(已使用断言验证)。我做错了什么吗? (我必须说我对 Lambda 函数/tor 不是很熟悉)
非常感谢!
最佳答案
您的函数接受 MyClass
作为 C
的值,因此它始终在函数的本地范围内使用新创建的实例。
您的测试函数正在检查 &C == W;
,但是 C
的地址不可能匹配存储在 vector
中的地址>(除非 删除
之前添加了它)。
如果您真的希望通过地址进行测试,您可能希望通过引用接受您的论点,void remove(MyClass& C)
在这种情况下,您的代码的某些其他部分可以通过现有的通过引用的对象,其指针可能在 vector
中。
更有可能的是,您希望按值进行测试,在这种情况下,为了提高效率,您可能希望代码更像这样:
void remove(const MyClass& C) // Receive by const reference to avoid pointless copy
{
// Testing C == *W tests the value pointed to, not the pointers themselves
myVect.erase( std::find_if( myVect.begin(), myVect.end(), [&](MyClass* W)
{return C == *W;} ) );
}
关于c++ - 指针 vector 和删除特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51717746/