Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Iterator Invalidation trong C++


Trong hướng dẫn này, ta thảo luận về iterator invalidation trong C++.

Khi duyệt container, iterator có thể bị vô hiệu hóa nếu thay đổi kích thước/hình dạng container (ví dụ push_back vào vector đang duyệt).

Ví dụ

#include <bits/stdc++.h> using namespace std; int main() { vector <int> v{1, 5, 10, 15, 20}; 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; }

Đầu ra

1 5 10 15 20 -1 -1

(Có thể xảy ra lỗi nếu vector được cấp phát lại bộ nhớ, iterator cũ trỏ đến vùng nhớ cũ).