C++容器類插入和刪除時迭代器的失效情況總結
阿新 • • 發佈:2021-06-17
容器底層資料結構型別 | 包含的具體容器 | 記憶體分配特點 | 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 | 不支援迭代器 | 不支援迭代器 |