2014-12-16 4 views
0

어쩌면이 질문은 조금에게 이론적입니다,하지만, IMO, 전달 된 객체를 의미한다이표준 : MINMAX

template <class T> 
pair<T,T> minmax (initializer_list<T> il); 

같은 std::minmax을 정의 뒤에 디자인 인센티브가 무엇인가 궁금해 인수 initializer_list , li으로 복사되며 해당 구성원은 모두 복사 가능해야합니다.

동안, std::min_element (또는이 문제 std::max_element의 경우)에만 컨테이너의 반복자가 전달되는 의미에서 더 "효율적"인

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

EDIT (필요는 실제로 전체 컨테이너 복사 없습니다) -에 기반을 Joachim Pileborg 코멘트, initializer_list<T> 개체가 복사되지 않습니다. 그래서 std::minmax이 임의의 컨테이너 ("비 const"성격을 가짐)에 속하지 않는 이유는 무엇입니까?

+3

에서 [이 참조] (HTTP : // EN .cppreference.com/w/cpp/utility/initializer_list) : "'std :: initializer_list'를 복사해도 기본 객체를 복사 할 수 없습니다." –

+0

@ Joachim Pileborg Thx, 내 질문을 편집했습니다. –

답변

5

For 업데이트 된 질문 : minmax 수 있습니다. 일반적으로 한 쌍의 반복자로 작업하면 minmax_element이라고합니다. 그래서 minmax 자체는 다음과 같이 컴팩트 한 가지를 쓸 수 있도록 단지 편의 속기 :

// define a, b, c here 
int min, max; 
std::tie(min, max) = std::minmax({a, b, c}); 

... 대신이 글을 쓰는 중 :

// define a, b, c here 
int min, max; 
auto list = {a, b, c}; 
auto result = std::minmax_element(list.begin(), list.end()); 
min = *result.first; 
max = *result.second;