1. 程式人生 > 其它 >C++容器類插入和刪除時迭代器的失效情況總結

C++容器類插入和刪除時迭代器的失效情況總結

容器底層資料結構型別 包含的具體容器 記憶體分配特點 insert操作後迭代器失效情況 erase操作後迭代器失效情況
陣列型資料結構 vector, string, deque, array 元素分配在連續的記憶體中 如果插入後重新分配空間,則所有迭代器都會失效;如果插入後未重新分配空間,會使得插入點之後的元素向後移動,故插入點之後的迭代器全部失效 會使得刪除點之後的元素向前移動,故刪除點及其之後的迭代器全部失效
連結串列型資料結構 list, forward_list 元素分配在不連續的記憶體中 插入不會使得任何迭代器失效 指向刪除點位置的迭代器失效,但是其他迭代器不會失效
樹形資料結構 map, set, multimap, multiset 使用紅黑樹來儲存資料 插入不會使得任何迭代器失效 指向刪除點位置的迭代器失效,但是其他迭代器不會失效
雜湊資料結構 unordered_map, unordered_multimap, unordered_multiset, unordered_set 使用雜湊表來儲存資料 插入不會使得任何迭代器失效 指向刪除點位置的迭代器失效,但是其他迭代器不會失效
堆疊型資料結構 stack, queue, priority_queue stack和queue底層一般用list或deque實現,priority_queue的底層資料結構一般為vector 不支援迭代器 不支援迭代器