容器疊代器失效通常發生在容器結構發生變化時,例如添加或刪除元素。不同類型的容器,如vector、deque、list、set等,對疊代器的影響各有不同。以下是一些主要原則:
對於vector(向量)和string(字元串),如果添加元素導致存儲空間重新分配,所有指向容器的疊代器、指針和引用都會失效。如果是插入操作且存儲空間未重新分配,那麼只有插入位置之後的元素疊代器會失效。
deque(雙端佇列)的情況略有不同。如果在首尾位置之外插入元素,疊代器、指針和引用都會失效。如果在首尾位置添加元素,疊代器會失效,但指向存在的元素的引用和指針不會失效。
list(鍊表)和forward_list(轉發列表)的情況則不同,它們的插入和刪除操作不會使任何疊代器失效。
為了避免使用失效的疊代器,應採取以下措施:
在修改容器後重新定位疊代器。例如,在循環中調用insert或erase時,應及時更新疊代器。
不要保存end()返回的疊代器,而是在每次添加或刪除元素後重新計算end()。
當使用容器時,要特別注意疊代器、引用和指針可能失效的問題,確保在每個循環步中都更新疊代器、引用或指針。