关于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 】
相关推荐:
如何在云主机快速搭建网站站点?
进行网站优化必须要坚持的四大原则
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
android nfc常用标签读取总结
智能起名网站制作软件有哪些,制作logo的软件?
如何快速生成ASP一键建站模板并优化安全性?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
详解vue.js组件化开发实践
5种Android数据存储方式汇总
网页设计与网站制作内容,怎样注册网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
香港网站服务器数量如何影响SEO优化效果?
MySQL查询结果复制到新表的方法(更新、插入)
Laravel如何实现API速率限制?(Rate Limiting教程)
php485函数参数是什么意思_php485各参数详细说明【介绍】
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Python文件流缓冲机制_IO性能解析【教程】
大同网页,大同瑞慈医院官网?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
晋江文学城电脑版官网 晋江文学城网页版直接进入
网站制作软件有哪些,制图软件有哪些?
如何在 React 中条件性地遍历数组并渲染元素
BootStrap整体框架之基础布局组件
高防服务器租用首荐平台,企业级优惠套餐快速部署
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel如何使用模型观察者?(Observer代码示例)
C语言设计一个闪闪的圣诞树
如何用VPS主机快速搭建个人网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
详解jQuery中基本的动画方法
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何在阿里云高效完成企业建站全流程?
如何彻底删除建站之星生成的Banner?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
jQuery validate插件功能与用法详解
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
JavaScript如何实现路由_前端路由原理是什么
如何在云指建站中生成FTP站点?

