এটি ও (1) হতে পারে যদি তালিকায় কোনও পতাকা সংরক্ষণ করা হয় যা প্রতিটি নোডের " " এবং " " পয়েন্টারের অর্থ অদলবদল করতে দেয় । যদি তালিকাটি উল্টানো একটি ঘন ঘন অপারেশন হয়ে থাকে, তবে এই জাতীয় সংযোজন সত্যিকার অর্থে কার্যকর হতে পারে এবং বর্তমান মান দ্বারা এটি প্রয়োগ করা নিষিদ্ধ হওয়ার কোনও কারণ আমি জানি না । যাইহোক, এই জাতীয় পতাকা থাকলে তালিকার সাধারণ ট্র্যাভারসালকে আরও ব্যয়বহুল করে তুলবে (যদি কেবল ধ্রুবক ফ্যাক্টর দ্বারা থাকে) তবে পরিবর্তেprevnext
current = current->next;
মধ্যে operator++তালিকা পুনরুক্তিকারীর, আপনি পেতে হবে
if (reversed)
current = current->prev;
else
current = current->next;
যা এমন কিছু নয় যা আপনি সহজেই যুক্ত করার সিদ্ধান্ত নেবেন। প্রদত্ত যে তালিকাগুলি সাধারণত বিপরীত হয় তার চেয়ে অনেক বেশি বার বিভ্রান্ত হয়, মানটিকে এই কৌশলটির আদেশ দেওয়ার পক্ষে এটি খুব বুদ্ধিমানের কাজ হবে । সুতরাং, বিপরীত অপারেশন লিনিয়ার জটিলতা অনুমোদিত। নোট না, তবে, যে টি ∈ হে (1) ⇒ টি ∈ হে ( ঢ ) তাই হয়, আগে উল্লেখ করেছে, আপনার "অপ্টিমাইজেশান" বাস্তবায়নে টেকনিক্যালি অনুমতি দেওয়া হবে।
আপনি যদি জাভা বা অনুরূপ ব্যাকগ্রাউন্ড থেকে এসে থাকেন তবে আপনি ভাবতে পারেন যে কেন পুনরুক্তিকারীকে প্রতিবার পতাকাটি পরীক্ষা করতে হবে। আমরা কি এর পরিবর্তে দুটি স্বতন্ত্র পুনরাবৃত্তকারী টাইপগুলি উভয়ই একটি সাধারণ বেস টাইপ থেকে প্রাপ্ত std::list::beginএবং std::list::rbeginবহুবারিকভাবে যথাযথ পুনরাবৃত্তিকে ফিরিয়ে দিতে পারি না? সম্ভব হওয়ার পরে এটি পুরো জিনিসটিকে আরও খারাপ করে দেবে কারণ পুনরাবৃত্তিকে অগ্রসর করা এখন পরোক্ষ (ইনলাইন করা শক্ত) ফাংশন কল হবে। জাভাতে, আপনি যাইহোক যাইহোক এই দামটি প্রদান করছেন, কিন্তু তারপরে আবারও, পারফরম্যান্স সমালোচিত হওয়ার পরে অনেকে সি ++ এ পৌঁছানোর এই কারণগুলির মধ্যে একটি।
মন্তব্যে বেনজামিন লিন্ডলি যেমন উল্লেখ করেছেন , যেহেতু reverseপুনরাবৃত্তিকারীদের অকার্যকর করার অনুমতি দেওয়া হচ্ছে না, কেবলমাত্র স্ট্যান্ডার্ডের দ্বারা অনুমোদিত অনুমতিটি পুনরাবৃত্তির ভিতরে তালিকার মধ্যে একটি পয়েন্টার সংরক্ষণ করে যা দ্বি-পরোক্ষ মেমরির অ্যাক্সেসের কারণ হয়ে থাকে।