2016-11-23 59 views
-1

我有以下的C++類,如何從C++中的對象矢量中刪除一個項目?

class rec 
{ 
public: 
    int width; 
    int height; 
}; 

而且在我的主要功能我有rec對象的vector,

rec r1,r2,r3; 
r1.height = r1.width = 1; 
r2.height = r2.width = 2; 
r3.height = r3.width = 3; 

vector<rec> rvec = { r1,r2,r3 }; 

現在我想從rvec刪除一個項目用下面的方法調用,

rvec.erase(remove(rvec.begin(), rvec.end(), r_remove), rvec.end()); 

但我得到這個錯誤:

C2678: binary '==': no operator found which takes a left-hand operand of type 'rec' (or there is no acceptable conversion)

+3

您需要實現==操作符()爲REC類以允許rec對象之間的比較。這是刪除用來查找與r_remove匹配的條目的內容。 –

+0

如果您無法爲您的類實現'operator ==',您也可以嘗試['std :: remove_if'](http://en.cppreference.com/w/cpp/algorithm/remove) – StoryTeller

+0

將來的參考你應該注意到每一個算法都是它接受的類型的一組要求。閱讀文檔並瞭解這些要求是什麼。 [cppreference](http://en.cppreference.com/w/cpp/algorithm)是書籤的好地方。 – StoryTeller

回答

5

你需要重載==操作符爲您的自定義數據結構rec

class rec 
{ 
public: 
    int width; 
    int height; 
    bool operator==(const rec& rhs) { 
     return (width == rhs.width) && (height == rhs.height); 
    } 
}; 

因爲remove通過運營商==比較值

+0

謝謝@ Starl1ght,它工作完美。我只需要將類名「rec」添加到運算符定義中:bool operator ==(const rec&rhs) – MHS2015

+0

@ MHS2015是的,有點mistypo,對不起:) – Starl1ght

相關問題