[英]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.