关于vector迭代器失效的几种情况总结
发布时间 - 2026-01-10 22:01:03 点击率:次在泛型编程还是STL的实际运用中,迭代器(iterator)无疑扮演者重要的角色。迭代器是一种类似于指针的对象(如可以内容提领,成员访问等),但他又不仅仅是一种普通的指针。

关于迭代器失效,我们可以看下面这个例子:
#include<vector>
#include<list>
void PrintVector(const vector<int>& v)
{
vector<int>::const_iterator it = v.begin();
while (it!=v.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
void TestIterator()
{
//迭代器失效
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(2);
v.push_back(4);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(4);
v.push_back(4);
v.push_back(6);
vector<int>::iterator it = v.begin();
while (it != v.end())
{
if (*it % 2 == 0)
{
it = v.erase(it);
++it;
}
}
PrintVector(v);
}
void main()
{
TestIterator();
}
这样的代码乍一看好像没有什么问题,但是他是有问题的,因为在vector是顺序存储的,在vector中删除一个元素之后,我们需要为vector重新分配一个空间,存放在旧的空间的元素被复制到新的空间,如果删除的这个元素的迭代器会指向下一个元素之后还++it,则在复制的时候找不到下一个元素,因此会使删除点及删除点之后的迭代器失效。
正确做法是:
vector<int>::iterator it = v.begin();
while (it != v.end())
{
if (*it % 2 == 0)
{
it = v.erase(it);
}
else
{
++it;
}
}
PrintVector(v);
对于添加元素也是同理,如果当前容器中有10个元素,现在又要添加元素到容器中,如果内存中没有多余的空间,因此vector需要重新开辟空间来存储原来的元素以及新添加的元素。在新的空间复制原理来的元素,并插入新的元素,最后撤销原来的空间,这种情况发生会使所有迭代器都失效。
总结:vector迭代器的几种失效的情况:
1、当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。
2、当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操 作返回的迭代器都会失效。
3、当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。
以上就是小编为大家带来的关于vector迭代器失效的几种情况总结全部内容了,希望大家多多支持~
# vector
# 迭代器失效
# C++中vector迭代器失效问题详解
# c++迭代器失效的情况汇总
# vector list map 遍历删除制定元素 防止迭代器失效的实例
# 浅谈c++ stl迭代器失效的问题
# C/C++迭代器的失效问题详解
# 迭代
# 是一种
# 几种
# 会使
# 提领
# 放在
# 是有
# 找不到
# 中有
# 但他
# 我们可以
# 也将
# 又要
# 这种情况
# 又不
# 则在
# 类似于
# 什么问题
# 小编
# 到新
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现一对一模型关联?(Eloquent示例)
如何用已有域名快速搭建网站?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Angular 表单中正确绑定输入值以确保提交与验证正常工作
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
如何正确选择百度移动适配建站域名?
如何快速生成橙子建站落地页链接?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
java获取注册ip实例
怎么用AI帮你设计一套个性化的手机App图标?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
浅谈javascript alert和confirm的美化
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
javascript基于原型链的继承及call和apply函数用法分析
如何获取PHP WAP自助建站系统源码?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何在万网开始建站?分步指南解析
网站制作大概多少钱一个,做一个平台网站大概多少钱?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
nginx修改上传文件大小限制的方法
如何在宝塔面板创建新站点?
百度浏览器如何管理插件 百度浏览器插件管理方法
Linux安全能力提升路径_长期防护思维说明【指导】
海南网站制作公司有哪些,海口网是哪家的?
如何快速配置高效服务器建站软件?
Laravel如何处理异常和错误?(Handler示例)
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何使用Livewire构建动态组件?(入门代码)
使用spring连接及操作mongodb3.0实例
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel中的Facade(门面)到底是什么原理
创业网站制作流程,创业网站可靠吗?
如何用低价快速搭建高质量网站?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
原生JS获取元素集合的子元素宽度实例
如何用AI帮你把自己的生活经历写成一个有趣的故事?
微信小程序 canvas开发实例及注意事项
jQuery validate插件功能与用法详解
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
IOS倒计时设置UIButton标题title的抖动问题
香港服务器建站指南:免备案优势与SEO优化技巧全解析
C语言设计一个闪闪的圣诞树
制作电商网页,电商供应链怎么做?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?

