আপনার পাশাপাশি চলার সাথে সাথে যদি সবকিছু মুছে ফেলার দরকার না হয়, তবে সমস্যাটি সমাধান করার জন্য, আপনি মুছে ফেলুন-মুছা আইডিয়ামটি ব্যবহার করতে পারেন:
m_CursorStack.erase(std::remove(m_CursorStack.begin(), m_CursorStack.end(), pCursor), m_CursorStack.end());
std::removeকনটেইনারটিতে থাকা সমস্ত আইটেম অদলবদল pCursorকরে যা শেষের সাথে মিলে যায় এবং প্রথম ম্যাচের আইটেমটিতে একটি পুনরাবৃত্তিকে ফেরত দেয়। তারপরে, eraseব্যাপ্তিটি ব্যবহার করে প্রথম ম্যাচটি মুছে যাবে এবং শেষ পর্যন্ত যাবে। মেলে না এমন উপাদানগুলির ক্রম সংরক্ষণ করা হয়েছে।
আপনি যদি এমন কোনও ব্যবহার করছেন std::vector, যেখানে সামগ্রীর মাঝখানে মুছে ফেলা অনেকগুলি অনুলিপি বা চলন্তের সাথে জড়িত থাকতে পারে তবে এটি আপনার জন্য দ্রুত কাজ করতে পারে।
অথবা অবশ্যই, উপরের উত্তরগুলি ব্যবহারের ব্যাখ্যা ব্যাখ্যা করার reverse_iterator::base()জন্য আকর্ষণীয় এবং জ্ঞানযোগ্য, সঠিক সমস্যাটি বর্ণিত সমাধান করার জন্য, আমি যুক্তি দিই যে std::removeএটি আরও উপযুক্ত।
i != m_CursorStack.rend()। পরিবর্তে, লিখুনi = m_CursorStack.rbegin(), end = m_CursorStack.rend(); i != end;। এটি, পুনরাবৃত্ত তুলনার জন্য আপনি প্রায় রাখতে পারেন এমন একটি পুনরুদ্ধারকারীকে সূচনা করুন - ধরে নিবেন যে আপনার অবস্থানের লুপটির কোনও পার্শ্ব প্রতিক্রিয়া হিসাবে শেষের অবস্থানটি পরিবর্তন হবে না।