2011-12-01 38 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

दो तर्कों के कम से कम ए और बी के कम से कम लौटाता है। यदि दोनों समकक्ष हैं, तो वापस आ गया है।

std::min_element

पुनरावर्तक रेंज [प्रथम, अंतिम) में सबसे छोटा मान के साथ तत्व की ओर इशारा करते देता है। पहले संस्करण के लिए ऑपरेटर < या दूसरे के लिए कंप का उपयोग करके तुलना की जाती है; कोई तत्व सबसे छोटा है यदि कोई अन्य तत्व उससे कम की तुलना नहीं करता है (हालांकि यह बराबर तुलना कर सकता है)।

+2

आह, यह लगभग निश्चित रूप से वह चाहता है जो वह चाहता है। – GManNickG

+0

'std :: min_element()' से वापसी मूल्य एक पुनरावर्तक है इसलिए इसे अस्वीकृत करने की आवश्यकता है। – hmjd

+0

@hmjd हाँ आप सही हैं। – FailedDev

-1

ध्यान रखें कि std::vector<T>::end() आपको अंतिम तत्व के लिए एक पुनरावर्तक नहीं देता है। यह अंतिम तत्व के पीछे इशारा करते हुए एक पुनरावर्तक देता है।
यदि आप इटरेटर तर्क के साथ पहले और अंतिम तत्व को संबोधित करना चाहते हैं तो आपको (test.begin(), test.end()-1) का उपयोग करने की आवश्यकता है।

+0

यह उपयोगी जानकारी है, लेकिन सवाल का जवाब नहीं है। एक टिप्पणी होनी चाहिए थी। –

संबंधित मुद्दे