प्रलेखन का कहना है कि इन const_iterators जब भी संभव हो, क्योंकि वे तेजी से कर रहे हैं इस्तेमाल किया जाना चाहिए।
यह सुनिश्चित करता है। http://qt-project.org/doc/qt-4.8/containers.html#stl-style-iterators से:
प्रत्येक कंटेनर वर्ग के लिए, वहाँ दो एसटीएल शैली इटरेटर प्रकार के होते हैं: एक प्रावधान है कि केवल पढ़ने के लिए उपयोग और एक जो पढ़ने-लिखने की पहुंच प्रदान करता है। जहां भी संभव हो केवल पढ़ने वाले इटरेटर्स का उपयोग किया जाना चाहिए क्योंकि वे रीड-राइट इटरेटर्स से तेज़ हैं।
क्या कहना बेवकूफ बात है।
सुरक्षित? हाँ। और तेज? यहां तक कि यदि यह मामला था (यह स्पष्ट रूप से जीसीसी और क्लैंग के साथ नहीं है), यह शायद ही कभी गैर-आधार वाले लोगों पर कॉन्स इटरेटर्स को प्राथमिकता देने का एक कारण है। यह समयपूर्व अनुकूलन है। गैर-आधार वाले लोगों पर कॉन्स इटरेटर्स को प्राथमिकता देने का कारण सुरक्षा है। यदि आपको संशोधित करने के लिए इंगित करने वाली सामग्री की आवश्यकता नहीं है, तो एक कॉन्स इटरेटर का उपयोग करें। इस बारे में सोचें कि आपके रखरखाव प्रोग्रामर आपके कोड पर क्या करेंगे।
बनाम cbegin
से संबंधित है, यह एक सी ++ 11 अतिरिक्त है। यह auto
कीवर्ड को कॉन्स्ट इटरेटर का उपयोग करने की अनुमति देता है, यहां तक कि गैर-कॉन्स्ट सेटिंग में भी।
स्रोत
2012-04-30 12:01:48
जब आप प्राचीन स्टेल से सी ++ मानक लाइब्रेरी के वर्तमान संस्करण में स्विच करते हैं, तो आपको एक cbegin फ़ंक्शन मिलेगा जो const_iterators देता है। यह भी ध्यान रखें कि आप iterators को const_iterators को असाइन कर सकते हैं और प्रारंभ का कॉन्स संस्करण एक कॉन्स इटरेटर भी देता है (सभी सी ++ मानक लाइब्रेरी के लिए)। – PlasmaHH
मेरा संदर्भ cplusplus.com था। कोई cbegin() नहीं है। क्या आप मुझे एक अच्छा और अधिक अद्यतित एसटीएल संदर्भ के लिए इंगित कर सकते हैं? अब सवाल और भी दबाने वाला है क्योंकि एक cbegin() विधि है ... – HWende
प्लाज़्माएचएच इंगित करने वाला फ़ंक्शन सी ++ 11 का हिस्सा है: [आलेख] (http://www.cplusplus.com/articles/EzywvCM9 /) लेकिन मुझे नहीं पता कि कॉन्स्ट इटरेटर के बजाय इटरेटर का उपयोग करने के लिए प्रदर्शन समस्याएं हैं या नहीं। – Uflex