0

I have a vector v of objects A in a Class B where each object has a member: int level. I want to find the maximum value of the level of all the objects in the vector v. To this end I use the function:

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());

}

However I get the error: Assertion Failed, vector iterator not deferencable. Should I define an int iterator additionally? Is there a better way to implement the function I want?

4

2 に答える 2

6

あなたの問題は最後の行にあると思います。空のベクトルは、その行でこのエラーになります。

実際、あなたはまったく満たしていないlevels。代わり==levels.end()!=levels.end()

また、ここにあるサンプルコードを見て、複数のコピーの代わりにユーザー指定の比較関数オブジェクトを使用してみてください。

    template <class ForwardIterator, class Compare>
    ForwardIterator max_element ( ForwardIterator first, ForwardIterator last, Compare comp );
于 2012-06-25T12:16:45.157 に答える
0

これは、ソリューションで発生している正確な問題のようですhttp://www.cplusplus.com/forum/general/18226/

于 2012-06-25T12:10:42.797 に答える