2017-05-17 3 views
5

std::max_element(std::begin(my_deque), std::end(my_deque))과 같은 코드를 사용할 수 있습니까?C++ 11에서 std :: deque에 std :: max_element()를 사용할 수 있습니까?

deque가 연속적으로 저장된다는 보장이 없기 때문에 묻습니다. std::max_element과 같은 함수를 사용할 때 정확하게 동작하는지 알고 싶습니다.

대단히 감사합니다!

+0

언제나 작동한다는 보장이 없습니까? – juanchopanza

+1

spec은'ForwardIt' 클래스 만 필요로하므로 forward iteration을 구현하는 컬렉션에서 작동해야합니다. 그것은 연속적인 스토리지와는 전혀 관련이 없습니다. –

+1

'std :: max_elements'는 forward iterator 만 필요합니다 : http://en.cppreference.com/w/cpp/algorithm/max_element –

답변

7

std::max_element은 우리가 앞으로 반복자를 필요로 알고있는 템플릿 유형 이름에서

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

형태의 서명이 있습니다. 96 container.requirements.general] - 테이블 당 우리는 std::deque 사용하는 것을 알고

는 앞으로 반복자를 사용하거나 더 나은 항상있을 것입니다 때문에

그래서 앞으로 반복자 요구 사항을 충족하는 반복자 카테고리 괜찮아.

6

예 올바르게 작동합니다. 범위를 정의 앞으로 반복자

그래서를 검사 -이 경우 호출됩니다 std::max_element의 과부하는 반복자에

template< class ForwardIt > 
ForwardIt max_element(ForwardIt first, ForwardIt last); 

유일한 요구 사항은

first

, last입니다입니다 무작위 접근 반복자에 대한 요구 사항은 없으며, 순방향 반복자 만 필요합니다.

+0

당신은 forwarder 만 필요로하는''max_element' '에 대해 옳았 습니다만,''std :: deque'' 반복자의 범주에 대한 혼란이 있습니다. 무작위 액세스 반복자가 있으면 연속 저장을 의미하지 않습니다. –

관련 문제