一道迭代器失效练习题
随便写写
首先学习迭代器失效
传送门 : C+±—浅谈迭代器失效
学完迭代器失效之后做一道题呗
题目
分析
vector的迭代器为啥会失效
1、插入的时候扩容,转移空间出现野指针
2、删除的时候移动了元素,导致指针没指向正确的元素
list的迭代器为啥会失效
list底层不是一片连续的空间
1、list迭代器在插入的时候不会扩容,所以插入时不会失效
2、list迭代器在删除的时候会释放内存,出现野指针,迭代器会失效
deque的迭代器为啥会失效
deque的底层是一段段不连续的buffer小数组组成
1、deque插入的时候不会扩容,所以插入不会失效
2、deque的每一个buffer是连续的,要删除就会挪动元素,就会造成迭代器失效。
OK,
a、container = vector
删除的时候会移动元素,造成迭代器失效
b、container = list
删除的时候会出现野指针,但iter提前++了,并没有指向已经啥放的空间,并不是野指针,所以迭代器没有失效
c、container = deque
删除的时候移动了元素,造成迭代器失效
所以最后的答案是1和3,即vector和deque