मेरे पास निम्नलिखित कोड हैं:

int main()
{
    int intArr[] = { 1,5,3 };
    //auto f = [](auto a, auto b) {return a < b;};
    //std::sort(intArr, intArr + 2, f);
    std::sort(intArr, intArr + 2);
    for (int& temp : intArr)
        cout << temp << endl;
}

हालाँकि, आउटपुट अनसोल्ड है (जैसे आउटपुट 1 5 3) है। लैम्ब्डा के साथ std::sort का उपयोग करते समय एक ही परिणाम। इस व्यवहार के कारण क्या है?

मैं Visual C ++ कंपाइलर (Visual Studio 2015) का उपयोग कर रहा हूं।

2
Igor Ševo 16 नवम्बर 2015, 15:34

2 जवाब

सबसे बढ़िया उत्तर

एसटीएल एल्गोरिदम में, जो रेंज लेते हैं, यदि आप पूरी रेंज प्रदान करना चाहते हैं, तो आपको एक तत्व को समाप्त करने के रूप में देना होगा-पिछले-अंत में और सीमा के अंत में ही नहीं, इस प्रकार आपके मामले में:

std::sort(intArr, intArr + 3);

या

std::sort(intArr, intArr + sizeof(intArr) / sizeof(int));

या इससे भी बेहतर:

std::sort(std::begin(intArr), std::end(intArr));
7
101010 16 नवम्बर 2015, 12:58

आपके पास सरणी में 3 मान हैं, लेकिन केवल 2 भेजें (चूंकि एसटीएल एल्गोरिदम दूसरा पैरामीटर past-end iterator है)। होना चाहिए

std::sort(intArr, intArr + 3);
2
ForEveR 16 नवम्बर 2015, 12:36