2011-12-01 45 views
12

Neden programı 1.std :: vector ve std :: dk davranış

#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; 
} 

O 2147483647

cevap

44

olarak minimum değerleri döndürür olarak minimum değeri döndürüyor değil şu Bunu deneyebilirsiniz:

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

std::min

İki argümandan daha azını döndürün a ve daha azını döndürür. Her ikisi de eşdeğer ise, bir iade edilir. std::min_element

aralık [ilk, son) en küçük değere sahip elemana işaret bir yineleyici döndürür. Karşılaştırmalar, ilk sürüm için ya operatöre ait < ya da ikincisine yönelik olarak kullanılarak gerçekleştirilir; Bir eleman, diğer hiçbir elemanın ondan daha az karşılaştırması durumunda en küçüktür (eşit olsa da, karşılaştırılabilir).

+2

Ah, bu neredeyse istediği şey. – GManNickG

+0

std :: min_element() 'öğesinden dönüş değeri bir yineleyicidir, bu nedenle kaynak kodunun kaldırılması gerekir. – hmjd

+0

@hmjd Evet haklısınız. – FailedDev

-1

std::vector<T>::end()'un son öğeye bir yineleyici vermediğini unutmayın. Son öğeyi BEHIND işaret eden bir yineleyici döndürür.
Yineleyici mantığıyla birinci ve son öğeyi adreslemek istiyorsanız, (test.begin(), test.end()-1)'u kullanmanız gerekir.

+0

Bu yararlı bir bilgi, ancak sorunun cevabı değil. Bir yorum olmalı. –

İlgili konular