C++ এ, আমাদের কাছে বিভিন্ন কন্টেইনার রয়েছে যেমন ভেক্টর, তালিকা, সেট, মানচিত্র ইত্যাদি। আমরা যখন C++ এ পুনরাবৃত্তিকারী ব্যবহার করি তখন আমাদের সতর্ক হওয়া উচিত। যখন আমরা একটি কন্টেইনারের উপর পুনরাবৃত্তি ব্যবহার করি, তখন কখনও কখনও এটি অবৈধ হয়ে যেতে পারে। যদি আকৃতি, আকার পরিবর্তন করা হয়, তাহলে আমরা এই ধরনের সমস্যার সম্মুখীন হতে পারি। নিম্নলিখিত উদাহরণে, আমরা অবৈধকরণের সমস্যা সনাক্ত করতে পারি।
উদাহরণ কোড
#include <iostream> #include <vector> using namespace std; int main() { vector <int> vec{11, 55, 110, 155, 220}; for (auto it=vec.begin(); it!=vec.end(); it++) if ((*it) == 110) vec.push_back(89); //inserting a new value while iterating the vector for (auto it=vec.begin();it!=vec.end();it++) cout << (*it) << " "; }-এর জন্য ভেক্টর পুনরাবৃত্তি করার সময় একটি নতুন মান সন্নিবেশ করা হচ্ছে
আউটপুট
11 55 110 155 220 89 89
এই প্রোগ্রামে আমরা বিভিন্ন ধরণের ফলাফল পেতে পারি। এখানে ভেক্টরের আকার আগে সংজ্ঞায়িত করা হয়নি। শুরুর জন্য কিছু মান প্রদান করা হয়। এখন পুনরাবৃত্তি করার সময়, আমরা আরও একটি মান যোগ করছি। এই ক্ষেত্রে, যদি ভেক্টরের কোন স্থান না থাকে, তাহলে এটি একটি নতুন মেমরি ব্লক তৈরি করবে অ্যাট্রনটাইম, এবং সমস্ত আইটেম কপি করা হবে। কিন্তু পুনরাবৃত্তিকারীকে পূর্ববর্তী ঠিকানায় নির্দেশ করা হবে। এর জন্য এটি কিছু অবৈধতা তৈরি করতে পারে।
আসুন আমরা ইটারেটর বাতিলের জন্য কিছু নিয়ম দেখি।
| সন্নিবেশ | Erasure | আকার পরিবর্তন করা হচ্ছে |
---|---|---|---|
ভেক্টর | সকল পুনরাবৃত্তিকারী, যেগুলি সন্নিবেশ বিন্দুর আগে একটি উপাদান নির্দেশ করছে, সেগুলি প্রভাবিত নয়, কিন্তু অন্যগুলি অবৈধ৷ এবং যদি ভেক্টরের আকার বৃদ্ধি করা হয়, তাহলে সমস্ত পুনরাবৃত্তিকারী অকার্যকর হয়। | সকল পুনরাবৃত্তিকারী এবং রেফারেন্স, যা মুছে ফেলার বিন্দুর পরে আছে, বাতিল করা হয়েছে৷ | সন্নিবেশ করা বা মুছে ফেলার মতোই৷ |
ডিক | সকল পুনরাবৃত্তিকারী এবং রেফারেন্স অবৈধ হয়ে যাবে যদি সন্নিবেশ করা আইটেমটি ডেকের শেষে ঢোকানো না হয়। | যদি শেষ অবস্থান ব্যতীত যেকোনো অবস্থান থেকে আইটেমগুলি মুছে ফেলা হয়, তাহলে সমস্ত পুনরাবৃত্তিকারী অবৈধ হয়ে যাবে৷ | সন্নিবেশ করা বা মুছে ফেলার মতোই৷ |
তালিকা | সমস্ত পুনরাবৃত্তিকারী এবং রেফারেন্স প্রভাবিত হয় না | শুধুমাত্র সেই পুনরাবৃত্ত, বা রেফারেন্স, যেগুলি মুছে ফেলা হবে এমন উপাদানের দিকে নির্দেশ করে, প্রভাবিত হয়৷ | সন্নিবেশ করা বা মুছে ফেলার মতোই৷ |
সেট, মানচিত্র, মাল্টিসেট, মাল্টিম্যাপ | সমস্ত পুনরাবৃত্তিকারী এবং রেফারেন্স প্রভাবিত হয় না | শুধুমাত্র সেই পুনরাবৃত্ত, বা রেফারেন্স, যেগুলি মুছে ফেলা হবে এমন উপাদানের দিকে নির্দেশ করে, প্রভাবিত হয়৷ | ---- |