(可能你一上来,面试官就会问你这个问题了)我简单总结一句:迭代器失效就是因为插入和删除,使得原本可以访问到容器内迭代器的元素,变得无法再访问。因为插入和删除可能更改了元素在内存中的位置,原来迭代器指向的位置不再存储原有的值。 2、map的迭代器失效 要想说迭代器失效问题,我们就得来看看迭代器为啥会失效?先...
vector的迭代器在内存重新分配时将失效(它所指向的元素在该操作的前后不再相同)。当把超过capacity()-size()个元素插入vector中时,内存会重新分配,所有的迭代器都将失效;否则,指向当前元素以后的任何元素的迭代器都将失效。当删除元素时,指向被删除元素以后的任何元素的迭代器都将失效。 (2)deque 内部数据结构:数组。
map迭代器失效问题 下面来看一下错误的map迭代器失效写法,代码如下: 代码语言:javascript 复制 #include<map>#include<algorithm>#include<iostream>#include<mutex>using std::map;voidmapTest(){std::mutex appPackageInfoMutex;// 应用map锁std::unique_lock<std::mutex>lk(appPackageInfoMutex);map<int,int>...
如果对迭代器失效问题一无所知, 则很容易写出如下的错误代码: 1#include <iostream>2#include <map>3usingnamespacestd;45typedef map<int,int>Map;6typedef map<int,int>::iterator MapIt;78voidprint(Map &m)9{10MapIt it;11for(it = m.begin(); it != m.end(); it++)12{13cout << it->seco...
1. 关联性容器的迭代器失效问题 当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕。 某次笔试, 我遇到这样一个题目: 删除map<int, int>中value为5的倍数的元素。 该题看起来很自然很简单, 实则有迭代器失效的陷阱。