2011-12-01 12 views
12

次のプログラムは、1のstd ::ベクトルとstd ::分振る舞い

#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

2つの引数のうち小さい方を返します aとbのうち小さい方を返します。両方が等しい場合、aが返されます。

std::min_element

)最初、最後の範囲の最小値を持つ要素を指すイテレータを返します。比較は、最初のバージョンのオペレータ<、または2番目のバージョンのオペレータを使用して実行されます。他の要素がそれを比較する要素がない場合、要素は最小です(同じですが比較できます)。

+2

ああ、これはほぼ確実に彼が望むものです。 – GManNickG

+0

'std :: min_element()'からの戻り値はイテレータなので、逆参照する必要があります。 – hmjd

+0

@hmjdはい、あなたは正しいです。 – FailedDev

-1

std::vector<T>::end()は、最後の要素に対する反復子を提供していません。最後の要素の後ろを指すイテレータを返します。
イテレータロジックで最初と最後の要素に対処する場合は、(test.begin(), test.end()-1)を使用する必要があります。

+0

これは有用な情報ですが、質問に対する回答ではありません。コメントだったはずです。 –

関連する問題