按值删除std :: vector中的对象

时间:2015-01-29 23:04:01

标签: c++ oop vector stl

如果它存在,我想从stl向量中删除一个对象。

class test
{
    vector<Objects> myvector;

public:
        test();
        removeTest(Objects);
}

test::removeTest(Objects aObject)
{
    myvector.erase(remove(myvector.begin(), myvector.end(), aTest),myvector.end());
}

但是,每当我尝试编译时,我都会收到以下错误:

no match for 'operator=='

只有通过“对象”类型的对象向量使用迭代器时才会出现这种情况。我可以让它适用于寻找整数然后删除它的情况。

任何人都知道我为什么会收到这些错误?我是否使用正确的方法通过值从stl矢量对象中删除对象?

1 个答案:

答案 0 :(得分:1)

  

不匹配'operator =='

错误说明了一切。您需要为Object类提供相等比较,std::remove无法知道如何比较您的对象以确定哪些需要删除。

例如:

struct Object {
    int i;
    std::string s;

    bool operator==(const Object& rhs) const {
        return i == rhs.i && s == rhs.s;
    }
};

它适用于整数,因为整数之间的相等比较是内置的。用户定义的类型不是这样。

有了这个,这个:

    void test::removeTest(const Object& aObject)
//  ^^^^                  ^^^^^^^^^^^^^  
    {
        myvector.erase(
            remove(myvector.begin(), myvector.end(), aObject),
//                                                   ^^^^^^^
            myvector.end()
            );
    }

应该完全按照自己的意愿行事。请注意,您缺少removeTest的返回类型(我假设您需要void)并且您应该通过引用来获取要删除的对象,以避免不必要的副本。 / p>