यह O (1) हो सकता है यदि सूची एक ध्वज को संग्रहीत करेगी जो प्रत्येक नोड के " " और " " बिंदुओं को स्वैप करने की अनुमति देता है। यदि सूची को उलटना एक बार-बार किया जाने वाला ऑपरेशन होगा, तो ऐसा जोड़ना वास्तव में उपयोगी हो सकता है और मुझे किसी भी कारण का पता नहीं है कि इसे लागू करना वर्तमान मानक द्वारा निषिद्ध क्यों होगा । हालांकि, इस तरह के झंडे के होने से सूची का सामान्य ट्रैवर्स अधिक महंगा हो जाएगा (यदि केवल एक स्थिर कारक द्वारा) क्योंकि इसके बजायprev
next
current = current->next;
में operator++
सूची इटरेटर की, आप मिलेगा
if (reversed)
current = current->prev;
else
current = current->next;
जो कुछ ऐसा नहीं है जिसे आप आसानी से जोड़ने का निर्णय लेंगे। यह देखते हुए कि सूचियों को आमतौर पर बहुत अधिक बार उलट दिया जाता है, क्योंकि यह इस तकनीक को अनिवार्य करने के लिए मानक के लिए बहुत नासमझी होगी । इसलिए, रिवर्स ऑपरेशन को रैखिक जटिलता की अनुमति है। टिप्पणी करते हैं, तथापि, कि टी ∈ हे (1) ⇒ टी ∈ हे ( एन ) ऐसा है, जैसा कि पहले उल्लेख के रूप में, अपने "अनुकूलन" को लागू करने तकनीकी रूप से अनुमति होगी।
यदि आप एक जावा या इसी तरह की पृष्ठभूमि से आते हैं, तो आप आश्चर्यचकित हो सकते हैं कि क्यों हर बार ध्वजवाहक को ध्वज की जांच करनी होती है। इसके बजाय क्या हमारे पास दो अलग-अलग इट्रेटर प्रकार नहीं हो सकते हैं, दोनों एक सामान्य आधार प्रकार से प्राप्त होते हैं, std::list::begin
और std::list::rbegin
पॉलीमॉर्फ़िक रूप से उपयुक्त इट्रेटर लौटाते हैं? जबकि संभव है, यह पूरी बात को और भी बदतर बना देगा क्योंकि इट्रेटर को आगे बढ़ाना अब अप्रत्यक्ष (हार्ड इनलाइन) फ़ंक्शन कॉल होगा। जावा में, आप इस मूल्य को वैसे भी नियमित रूप से भुगतान कर रहे हैं, लेकिन फिर से, यह एक कारण है कि कई लोग C ++ के लिए पहुंचते हैं जब प्रदर्शन महत्वपूर्ण होता है।
जैसा कि बेंजामिन लिंडले ने टिप्पणियों में बताया , चूंकि reverse
पुनरावृत्तियों को अमान्य करने की अनुमति नहीं है, मानक द्वारा अनुमत एकमात्र दृष्टिकोण ऐसा लगता है कि पुनरावृत्त को पुनरावृत्त सूची के अंदर सूची में संग्रहीत किया जाता है जो दोहरे-अप्रत्यक्ष मेमोरी एक्सेस का कारण बनता है।