यह आप में से कुछ के लिए निराशाजनक प्रतीत हो सकता है, लेकिन एसटीएल कंटेनर पर पुनरावृत्ति के निम्नलिखित 2 तरीकों में से कौन सा बेहतर है? क्यों?सी ++ एसटीएल: एसटीएल कंटेनर पर पुनरावृत्ति की कौन सी विधि बेहतर है?
class Elem;
typedef vector<Elem> ElemVec;
ElemVec elemVec;
// Method 0
for (ElemVec::iterator i = elemVec.begin(); i != elemVec.end(); ++i)
{
Elem& e = *i;
// Do something
}
// Method 1
for (int i = 0; i < elemVec.size(); ++i)
{
Elem& e = elemVec.at(i);
// Do something
}
विधि 0 क्लीनर एसटीएल की तरह लगता है, लेकिन विधि 1 कम कोड के साथ प्राप्त करता है। एक कंटेनर पर सरल पुनरावृत्ति किसी भी स्रोत कोड में सभी दिखाई देता है। इसलिए, मैं विधि 1 चुनने के इच्छुक हूं जो दृश्य अव्यवस्था और कोड आकार को कम करने लगता है।
पीएस: मुझे पता है कि इटरेटर एक साधारण सूचकांक से कहीं अधिक कर सकते हैं। लेकिन, कृपया ऊपर दिखाए गए कंटेनर पर सरल पुनरावृत्ति पर केंद्रित उत्तर/चर्चा रखें।
धन्यवाद नील। मेरा कोड आमतौर पर टेम्पलेट्स के साथ काम नहीं कर रहा है, लेकिन वेक्टर जिनके प्रकार ज्ञात हैं। क्या आप विस्तार कर सकते हैं कि विधि 0 आपके उत्तर में अधिक कुशल क्यों है? –
अगर इटरेटर वास्तव में सीधे सूचक के रूप में लागू किया जाता है तो यह थोड़ा अधिक कुशल हो सकता है। नोट "मई" और "थोड़ा" शब्दों का उपयोग - आपको सुनिश्चित करने के लिए मापने की आवश्यकता है। –
हां, वास्तव में इटेटरेटर अधिकांश कंटेनरों के लिए सूचक से अधिक कुछ नहीं है। लेकिन, यह कोड को तेज़ी से कैसे बनाता है? AFAIK भी विधि 1 पॉइंटर अंकगणित होने के समाप्त होता है, है ना? –