簡體   English   中英

在C ++中從向量擦除對象

[英]Erase object from vector in C++

我正在嘗試從C ++中的向量中擦除對象,但它給出了一個奇怪的(而且很長的)錯誤。 我寫了這個:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class foo
{
    int a;
    public:
    foo(int _a):a(_a){}
};

int main() {
    foo f1(5),f2(10);
    vector<foo> vec = {f1,f2};
    vec.erase(remove(vec.begin(),vec.end(),f1),vec.end()); // remove f1 (error)
    return 0;
}

我得到的確切錯誤在這里
另一方面,當我創建一個int向量,然后嘗試從該向量中刪除一個整數時,它可以正常工作。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> vec = {5,10};
    vec.erase(remove(vec.begin(),vec.end(),5),vec.end()); // works fine
    return 0;
}

我不確定為什么在第一種情況下會出錯。

對於std::remove您的class foo應該包含operator ==否則您應該顯式傳遞比較函數。 對於標准類型(例如int ),比較函數由語言定義,因此編譯時不會出錯。

operator ==一個示例可以是:

class foo
{
    ...
    bool operator ==(const foo &t) const { return t.a == a; }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM