std::vector<string> names;
std::vector<string>::iterator start = names.begin();
std::vector<string>::iterator end = names.end();
sort (start,end);
//are my start and end valid at this point?
//or they do not point to front and tail resp?
उत्तर
सी ++ स्टैंडर्ड § 23.1/11 के अनुसार:
अन्यथा जब तक निर्दिष्ट (या तो स्पष्ट या अन्य कार्यों के मामले में एक समारोह को परिभाषित करते हुए), लागू एक कंटेनर सदस्य समारोह या एक कंटेनर गुजर पर एक तर्क के रूप में एक लाइब्रेरी फ़ंक्शन iterators को उस कंटेनर के भीतर ऑब्जेक्ट्स के मानों को बदलने या बदलने के लिए अमान्य नहीं होगा।
§ 25,3 "छंटाई और संबंधित संचालन", निर्दिष्ट नहीं करता कि iterators अवैध कर दिया जाएगा ताकि प्रश्न में iterators वैध रहना चाहिए।
वे अभी भी शुरुआत और अंत को इंगित करते हैं। वेक्टर के उन स्लॉट में मूल्य शायद बदल गए हैं, लेकिन भंडारण स्थान जिसमें प्रत्येक रहता है वही रहता है।
std::vector
अपने तत्वों को संगत स्मृति में रखता है। std::sort
मूल्य के आधार पर तर्क (iterators) लेता है और उनके बीच अनुक्रम पुन: व्यवस्थित करता है। शुद्ध परिणाम आपके स्थानीय चर start
और end
अभी भी वेक्टर के पहले और एक-पिछले-अंतिम तत्वों को इंगित कर रहे हैं।
std::sort
इटरेटर को वेक्टर में अमान्य नहीं करेगा। सॉर्ट टेम्पलेट वेक्टर की सामग्री तक पहुंचने और संशोधित करने के लिए इटरेटर पर *
ऑपरेटर का उपयोग करता है, और वेक्टर तत्व को संशोधित करता है, हालांकि वेक्टर में पहले से मौजूद तत्व के लिए इटरेटर किसी भी इटरेटर को अमान्य नहीं करेगा।
सारांश में,
- अपने मौजूदा iterators
- लेकिन अवैध नहीं किया जाएगा, तत्वों वे द्वारा प्रदान की मानक के लिए समर्थन करने के लिए
संशोधित हो गया है के अलावा बात किरिल वी Lyadvinsky (Does a vector sort invalidate iterators?):
- 25/5 "Algorit कि के प्रकार एचएमएस पुस्तकालय "
एक एल्गोरिथ्म के प्रभाव अनुभाग का कहना है हैं कि एक मूल्य के किसी भी इटरेटर एक तर्क के रूप में पारित द्वारा की ओर इशारा किया संशोधित किया गया है, तो है कि एल्गोरिथ्म एक अतिरिक्त प्रकार की आवश्यकता है तर्क एक म्यूटेबल इटरेटर (24.1) की आवश्यकताओं को पूरा करेगा।
- 24।1/4 "इटरेटर आवश्यकताओं"
अपनी श्रेणी इसके अलावा, एक आगे, द्विदिश, या रैंडम एक्सेस इटरेटर भी परिवर्तनशील या पर कि क्या अभिव्यक्ति की परिणाम * मैं के रूप में व्यवहार के आधार निरंतर किया जा सकता है एक संदर्भ या निरंतर के संदर्भ के रूप में।
- 1. क्या वेक्टर का आकार बदलना इटरेटर्स को अमान्य करता है?
- 2. क्या कोई सी # संग्रह है जहां संशोधन इटरेटर्स को अमान्य नहीं करता है?
- 3. एसटीएल वेक्टर को कैसे सॉर्ट करें?
- 4. एससीरीआई इटरेटर्स क्या हैं?
- 5. क्या एल्गोरिदम पाइथन सॉर्ट() उपयोग करता है?
- 6. push_back या push_front एक डेक के इटरेटर को अमान्य क्यों करता है? शीर्षक के रूप में
- 7. क्या "सॉर्ट करें" विकल्प ... मान करता है?
- 8. क्या एक म्यूटेबल इनपुट इटेटरेटर बढ़ाना पुराने इटरेटर मूल्यों को अमान्य करता है?
- 9. चार इटरेटर्स
- 10. वेक्टर के सदस्य फ़ंक्शन के रूप में वेक्टर() विधि क्यों नहीं है, जबकि सूची करता है?
- 11. क्या हैशटेबल को सॉर्ट करना संभव है?
- 12. क्या वेक्टर :: shrink_to_fit को फिर से स्थानांतरित करने की अनुमति है?
- 13. क्या कोई वास्तव में डेटा के टेराबाइट सॉर्ट करता है?
- 14. क्या बिट्ससेट का वेक्टर बनाना संभव है?
- 15. MapReduce सॉर्ट एल्गोरिदम कैसे काम करता है?
- 16. जावा में क्लोनिंग इटरेटर्स
- 17. PyCrypto - प्रारंभिक वेक्टर कैसे काम करता है?
- 18. अमान्य सूची और अमान्य DisplayList के बीच क्या अंतर है?
- 19. सी ++ इटरेटर्स की आजीवन और वैधता क्या है?
- 20. सी ++ std :: वेक्टर कैसे काम करता है?
- 21. सॉर्ट तत्वों को सॉर्ट करना
- 22. PHP एसपीएल इटरेटर्स
- 23. unordered_map में बिडरेक्शनल इटरेटर्स?
- 24. सॉर्ट किए गए वेक्टर में तत्व डालने और
- 25. फॉरवर्ड-इटरेटर आउटपुट-इटरेटर्स हैं?
- 26. क्यों ** सॉर्ट नहीं करता ** प्रत्येक मशीन पर समान सॉर्ट करें?
- 27. * अस्थायी रूप से * वेक्टर सॉर्ट करने का एक अच्छा तरीका क्या है?
- 28. पंक्ति वेक्टर को कॉलम वेक्टर
- 29. वेक्टर को सॉर्ट करने के लिए किस फ़ंक्शन का उपयोग किया जा सकता है?
- 30. PostInvalidate() क्या करता है?
मुझे लगता है कि 'std :: vector :: iterator start' होना चाहिए? –
भले ही यह सच है, आपके बाद आने वाला डेवलपर एक दिन बर्बाद कर देगा, यह साबित करने की कोशिश कर रहा है कि वह कुछ बग के लिए मूल कारण है ... –
@ बेन, धन्यवाद, क्षमा करें कॉपी-पेस्ट बुराई! –