এটা সম্ভবত যোগ মূল্য যে কোনো ধরনের একটি সন্নিবেশ পুনরুক্তিকারীর ( std::back_insert_iterator
, std::front_insert_iterator
,std::insert_iterator
) যতদিন বৈধ থাকা নিশ্চিত করা হয় হিসাবে সব সন্নিবেশ এই পুনরুক্তিকারীর মাধ্যমে সঞ্চালিত হয় এবং অন্য কোনো স্বাধীন পুনরুক্তিকারীর-invalidating ঘটনা ঘটে।
উদাহরণস্বরূপ, আপনি যখন std::vector
ব্যবহার করে কোনও সন্নিবেশ ক্রিয়াকলাপ করছেনstd::insert_iterator
এটি করে তখন যথেষ্ট সম্ভাবনা রয়েছে যে এই সন্নিবেশগুলি ভেক্টর পুনঃনির্মাণকে ট্রিগার করবে, যা সমস্ত পুনরাবৃত্তিকে সেই ভেক্টরের "পয়েন্ট" অবৈধ করে দেবে। যাইহোক, প্রশ্নের মধ্যে সন্নিবেশ পুনরাবৃত্তি বৈধ থাকার গ্যারান্টিযুক্ত, অর্থাত আপনি নিরাপদে সন্নিবেশের ক্রমটি চালিয়ে যেতে পারেন। মোটেও ভেক্টর রিলোকেশনটি ট্রিগার করার বিষয়ে চিন্তা করার দরকার নেই।
এটি আবার কেবল সন্নিবেশ পুনরাবৃত্তির মাধ্যমে সম্পাদিত সন্নিবেশগুলিতে প্রয়োগ হয়। যদি পুনরাবৃত্তকারী-অবৈধকরণ ইভেন্টটি ধারকটিতে কিছু স্বতন্ত্র ক্রিয়া দ্বারা ট্রিগার করা হয়, তবে সন্নিবেশ পুনরাবৃত্তি সাধারণ নিয়ম অনুসারে অবৈধ হয়ে যায়।
উদাহরণস্বরূপ, এই কোড
std::vector<int> v(10);
std::vector<int>::iterator it = v.begin() + 5;
std::insert_iterator<std::vector<int> > it_ins(v, it);
for (unsigned n = 20; n > 0; --n)
*it_ins++ = rand();
ভেক্টরটি এই প্রক্রিয়াটির মাঝখানে কোথাও পুনর্বিবেচনার "সিদ্ধান্ত নেন" এমনকি ভেক্টরটিতে সন্নিবেশগুলির একটি বৈধ ক্রম সম্পাদন করার গ্যারান্টিযুক্ত। Iterator it
স্পষ্টতই অবৈধ হয়ে যাবে, কিন্তু it_ins
বৈধ অবিরত থাকবে।