मैं सीपीपी में एसटीएल से गुजर रहा हूं और मुझे List.
कोड के नीचे लिखा:
#include <bits/stdc++.h>
using namespace std;
int main()
{
list<int> ls;
ls.push_back(23);
ls.push_front(34);
ls.push_front(39);
ls.push_front(334);
ls.push_front(434);
ls.push_front(7834);
ls.push_front(634);
ls.push_front(934);
list<int>::iterator it10 = ls.begin();
list<int>::iterator it11 = ls.end();
list<int>::reverse_iterator it12 = ls.rbegin();
list<int>::reverse_iterator it13 = ls.rend();
ls.sort();
for (auto it = it10; it != it11; it++)
{
cout << *(it) << "\n";
}
}
तो यहां मैं सूची को सॉर्ट करने से पहले इटरेटर्स को परिभाषित कर रहा हूं और मुझे आउटपुट मिलता है:
934
7834
लेकिन अगर मैं इटरेटर्स को परिभाषित करने से पहले सॉर्ट करता हूं जैसे:
ls.sort();
list<int>::iterator it10 = ls.begin();
list<int>::iterator it11 = ls.end();
list<int>::reverse_iterator it12 = ls.rbegin();
list<int>::reverse_iterator it13 = ls.rend();
मुझे सही आउटपुट मिल रहा है:
23
34
39
334
434
634
934
7834
यह ऐसा व्यवहार क्यों कर रहा है यह कैसे काम करता है? कृपया समझाएँ। धन्यवाद!
1 उत्तर
it10
सूची में तत्व 934
का पुनरावर्तक है। it11
सूची के अंत में एक पुनरावर्तक है। छँटाई के बाद it10
तत्व 934
का पुनरावर्तक है और it11
सूची के अंत में एक पुनरावर्तक है। छँटाई के बाद 934
से शुरू होने वाले तत्व हैं:
943
7834
std::list::sort
के बारे में cppreference से:
std::sort के लिए रैंडम एक्सेस इटरेटर की आवश्यकता होती है और इसलिए इसका उपयोग सूची के साथ नहीं किया जा सकता है। यह फ़ंक्शन std::sort से भी भिन्न होता है, जिसमें सूची के तत्व प्रकार को स्वैप करने योग्य होने की आवश्यकता नहीं होती है, सभी पुनरावृत्तियों के मूल्यों को संरक्षित करता है, और एक स्थिर प्रकार का प्रदर्शन करता है।
std::sort
के साथ पुनरावर्तक अमान्य हो जाते हैं। std::list::sort
के साथ ऐसा नहीं है। मैला बोलना, std::list
s में इटरेटर आम तौर पर दूसरों की तुलना में अधिक स्थिर होते हैं। आपके उदाहरण में it10
और it11
अभी भी समान तत्वों की ओर इशारा करते हैं। छँटाई के बाद, जो तत्व पहले स्थान पर था वह अब पहले स्थान पर नहीं है। यह दूसरे लेकिन अंतिम स्थान पर है और it11
अभी भी सूचियों end
की ओर इशारा करता है।
विचार करें कि एक std::list
एक लिंक्ड सूची है, क्रम बदलने के लिए यह आवश्यक नहीं है कि मेमोरी में अन्य पदों पर तत्वों को संशोधित या स्थानांतरित किया जाए, केवल लिंक को अपडेट करना होगा।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।