2011-12-01 3 views
12

이유는 프로그램이 1표준 : : 벡터 및 표준 : 분의 행동

#include <vector> 
#include <algorithm> 
#include <iostream> 

int main (int argc, char **argv) { 
    std::vector<int> test; 
    test.push_back(INT_MAX); 
    test.push_back(1); 

    int min = *(std::min(test.begin(), test.end())); 

    std::cout << "Minimum = " << min << std::endl; 
} 

그것은 2147483647

답변

44

으로 minimum 값을 반환로 최소값을 반환하지 않습니다 다음이 작업을 시도 할 수 :

int min = *std::min_element(test.begin(), test.end()); 

std::min

두 개의 인수 중 더 작은 것을 반환합니다. a와 b 중 작은 값을 반환합니다. 둘 다 동일하면 a가 리턴됩니다. std::min_element

는 범위 [제 마지막)에서 가장 작은 값으로 소자를 가리키는 반복자를 반환. 첫 번째 버전에는 연산자 <을 사용하고 두 번째 버전에는 comp를 사용하여 비교를 수행합니다. 요소가 다른 요소와 비교하는 요소가없는 경우 요소는 가장 작습니다 (같음).

+2

아, 이것은 거의 그가 원하는 것입니다. – GManNickG

+0

'std :: min_element()'의 반환 값은 반복자이므로 역 참조가 필요합니다. – hmjd

+0

@hmjd 네, 맞습니다. – FailedDev

-1

std::vector<T>::end()은 마지막 요소에 대한 반복기를 제공하지 않습니다. 마지막 요소 다음에 BEHIND를 가리키는 반복자를 리턴합니다.
첫 번째 요소와 마지막 요소를 반복기 논리로 처리하려면 (test.begin(), test.end()-1)을 사용해야합니다.

+0

이것은 유용한 정보이지만 질문에 대한 대답이 아닙니다. 코멘트 였음에 틀림 없다. –