2012-06-25 34 views
0

我有一個類B中的對象A的向量v,其中每個對象都有一個成員:int level。我想找到的向量v的所有對象的級別的最大值。爲此我使用的功能:在對象的向量中查找最大值

int B::findMaxLevel() 
{ 
vector<int> levels; 
vector<A*>::iterator it; 

for(it=v.begin();it!=v.end();++it) 
{ 
    if(find(levels.begin(), levels.end(), (*it)->getLevel())!=levels.end()) 
     levels.push_back((*it)->getLevel()); 
} 

return *max_element(levels.begin(), levels.end()); 

} 

但是我得到的錯誤:斷言失敗,矢量迭代器不deferencable。 我應該另外定義一個int迭代器嗎?有沒有更好的方法來實現我想要的功能?

+1

您在哪一行收到此錯誤消息? – RedX

+2

如果'v'是空的,然後'levels'變空了,'max_element'返回'levels.end()'? – Mohammad

+0

'max_element'看起來像什麼? –

回答

6

具有確切的問題,我想你的問題是與最後一行。一個空的向量將導致該行出現此錯誤。

其實你根本沒有填寫levels。它應該是==levels.end()而不是!=levels.end()

另請參閱here中的示例代碼,並嘗試使用用戶指定的比較函數對象而不是多個副本。

template <class ForwardIterator, class Compare> 
    ForwardIterator max_element (ForwardIterator first, ForwardIterator last, Compare comp); 
相關問題