Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Iterator Invalidation ในโปรแกรม C ++


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อทำความเข้าใจการทำให้ตัววนซ้ำเป็นโมฆะใน C++

ขณะวนซ้ำองค์ประกอบของวัตถุคอนเทนเนอร์ บางครั้งอาจใช้ไม่ได้หากเราไม่ใช้การตรวจสอบที่ถูกผูกไว้ ซึ่งส่วนใหญ่เกิดขึ้นเนื่องจากการเปลี่ยนแปลงในรูปร่างและขนาดของวัตถุคอนเทนเนอร์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int main() {
   //declaring a vector
   vector <int> v{1, 5, 10, 15, 20};
   //changing vector during execution
   //which will cause bound invalidation
   for (auto it=v.begin();it!=v.end();it++)
      if ((*it) == 5)
         v.push_back(-1);
   for (auto it=v.begin();it!=v.end();it++)
      cout << (*it) << " ";
   return 0;
}

ผลลัพธ์

1 5 10 15 20 -1 -1

(อาจเกิดขึ้นได้เช่นกันว่าการเพิ่มองค์ประกอบใหม่ เวกเตอร์จะถูกคัดลอกไปยังตำแหน่งใหม่โดยที่ตัววนซ้ำของเรายังคงชี้ไปที่องค์ประกอบเก่า ซึ่งจะทำให้เกิดข้อผิดพลาด)