本人微信公众号:CPP进阶之旅
如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货
说到容器增减元素时,对迭代器的影响,我们需要考虑到连续内存容器和非连续内存容器,在增加和减少元素时对迭代器的影响。
连续内存容器
对于连续内存容器,如vector、deque等,增减元素均会使得当前迭代器之后的所有迭代器失效。例如,当使用erase()删除元素后,此时的迭代器相当于是指向了被删除元素的下一个元素的有效迭代器。删除元素时常见的编程写法为:
for(auto iter = myvec.begin(); iter != myvec.end()) //另外注意这里用 "!=" 而非 "<"
{
if(/*满足删除条件*/)
iter = myvec.erase(iter);
else
++iter;
}
非连续内存容器
对于非连续内存容器,如set、map等。增减元素只会使得当前迭代器无效。仍以删除元素为例,由于删除元素后,erase()返回的迭代器将是无效的迭代器。因此,需要在调用erase()之前,就使得迭代器指向删除元素的下一个元素。常见的编程写法为:
for(auto iter = myset.begin(); iter != myset.end()) //另外注意这里用 "!=" 而非 "<"
{
if(/*满足删除条件*/)
myset.erase(iter++); //使用一个后置自增就OK了
else
++iter;
}
重要说明
欢迎关注我的个人微信公众号,查看专业的客户端/服务端开发知识、笔试面试题目、程序员职场经验与心得分享。