มันอาจจะเป็นมูลค่าเพิ่มที่ iterator แทรกทุกชนิด ( std::back_insert_iterator
, std::front_insert_iterator
, std::insert_iterator
) รับประกันได้ว่าจะยังคงใช้ได้ตราบเท่าที่แทรกทั้งหมดจะดำเนินการผ่าน iterator นี้และไม่มีเหตุการณ์อื่น iterator-ต้นเหตุอิสระเกิดขึ้น
ตัวอย่างเช่นเมื่อคุณดำเนินการชุดของการแทรกลงใน a 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();
มีการรับประกันว่าจะดำเนินการตามลำดับที่ถูกต้องของการแทรกลงในเวกเตอร์แม้ว่าเวกเตอร์ "ตัดสินใจ" ที่จะจัดสรรใหม่บางแห่งในช่วงกลางของกระบวนการนี้ it
เห็นได้ชัดว่าIterator จะใช้งานไม่ได้ แต่it_ins
จะยังคงใช้ได้ต่อไป