2012-06-25 4 views
0

각 오브젝트의 멤버가 int 클래스 인 클래스 B에 오브젝트 v의 벡터 v가 있습니다. 나는 벡터 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()

here의 예제 코드를 살펴보고 여러 복사본 대신 사용자 지정 비교 함수 개체를 사용해보십시오.

template <class ForwardIterator, class Compare> 
    ForwardIterator max_element (ForwardIterator first, ForwardIterator last, Compare comp);