C++ STL 迭代器详解
C STL 迭代器详解1. 迭代器概述迭代器是STL中提供的一种访问容器元素的通用方法它类似于指针可以遍历容器中的所有元素。迭代器在容器和算法之间起到了桥梁作用。2. 迭代器分类2.1 输入迭代器 (Input Iterator)只读访问单向移动示例istream_iterator2.2 输出迭代器 (Output Iterator)只写访问单向移动示例ostream_iterator2.3 前向迭代器 (Forward Iterator)读写访问单向移动示例forward_list的迭代器2.4 双向迭代器 (Bidirectional Iterator)读写访问双向移动示例list,set,map的迭代器2.5 随机访问迭代器 (Random Access Iterator)读写访问随机访问示例vector,deque,array的迭代器3. 基本迭代器操作3.1 获取迭代器vectorintv{1,2,3};autobeginv.begin();// 指向第一个元素autoendv.end();// 指向最后一个元素的下一个位置3.2 迭代器遍历for(autoitv.begin();it!v.end();it){cout*it ;}3.3 反向迭代器for(autoritv.rbegin();rit!v.rend();rit){cout*rit ;// 反向输出}4. 迭代器适配器4.1 插入迭代器vectorintv;back_insert_iteratorvectorintback_it(v);// 尾部插入*back_it1;// 等价于 v.push_back(1)front_insert_iteratorvectorintfront_it(v);// 头部插入(仅适用于list/deque)*front_it0;// 等价于 v.push_front(0)insert_iteratorvectorintinsert_it(v,v.begin()1);// 指定位置插入*insert_it5;// 在第二个位置插入54.2 流迭代器// 输入流迭代器istream_iteratorintinput_it(cin);istream_iteratorinteof;// 结束标志while(input_it!eof){v.push_back(*input_it);}// 输出流迭代器ostream_iteratorintoutput_it(cout, );copy(v.begin(),v.end(),output_it);// 输出所有元素4.3 移动迭代器vectorstringv{a,b,c};vectorstringv2(make_move_iterator(v.begin()),make_move_iterator(v.end()));// v中的元素被移动到v2v现在包含不确定状态的值5. 迭代器与算法5.1find()autoitfind(v.begin(),v.end(),3);if(it!v.end()){coutFound at position: distance(v.begin(),it);}5.2sort()sort(v.begin(),v.end());// 排序整个vectorsort(v.begin(),v.begin()3);// 只排序前3个元素5.3copy()vectorintv2(v.size());copy(v.begin(),v.end(),v2.begin());// 复制元素6. 迭代器特性6.1iterator_traitstypedefiterator_traitsvectorint::iterator::value_type ValueType;ValueType x10;// x的类型是int6.2 距离计算autodistdistance(v.begin(),v.end());// 计算元素数量7. 完整示例#includeiostream#includevector#includelist#includealgorithm#includeiteratorusingnamespacestd;intmain(){// 1. 基本迭代器使用vectorintv{3,1,4,1,5,9,2,6};coutOriginal vector: ;for(autoitv.begin();it!v.end();it){cout*it ;}coutendl;// 2. 使用算法和迭代器sort(v.begin(),v.end());coutSorted vector: ;copy(v.begin(),v.end(),ostream_iteratorint(cout, ));coutendl;// 3. 反向迭代器coutReverse order: ;for(autoritv.rbegin();rit!v.rend();rit){cout*rit ;}coutendl;// 4. 插入迭代器listintl;copy(v.begin(),v.end(),front_inserter(l));coutList after front insertion: ;copy(l.begin(),l.end(),ostream_iteratorint(cout, ));coutendl;// 5. 流迭代器coutEnter some numbers (CtrlD to end): ;istream_iteratorintinput_it(cin),eof;vectorintinput_vec(input_it,eof);coutYou entered: ;copy(input_vec.begin(),input_vec.end(),ostream_iteratorint(cout, ));coutendl;return0;}8. 迭代器失效问题8.1vector插入操作可能使所有迭代器失效删除操作会使被删除元素之后的迭代器失效8.2list/set/map插入不会使任何迭代器失效删除只会使指向被删除元素的迭代器失效9. 自定义迭代器classRange{intstart,end;public:Range(ints,inte):start(s),end(e){}classiterator{intcurrent;public:iterator(intc):current(c){}intoperator*()const{returncurrent;}iteratoroperator(){current;return*this;}booloperator!(constiteratorother)const{returncurrent!other.current;}};iteratorbegin()const{returniterator(start);}iteratorend()const{returniterator(end);}};intmain(){for(inti:Range(1,5)){couti ;// 输出: 1 2 3 4}return0;}10. 性能建议尽量使用前置递增(it)而非后置递增(it)对随机访问迭代器直接使用下标可能更快避免在循环中反复调用end()可缓存其值注意迭代器失效问题特别是在修改容器时

相关新闻

Qt与海康威视工业相机整合:实时采集转换Halcon变量并智能展示(支持多种相机模式与彩色黑白切换)

Qt与海康威视工业相机整合:实时采集转换Halcon变量并智能展示(支持多种相机模式与彩色黑白切换)

Qt联合海康威视工业相机采集,在线转Halcon变量并显示(独立封装、支持多相机、支持黑白相机和彩色相机)。在现代工业视觉系统中,高效、稳定、可扩展的图像采集与处理能力是实现自动化检测、精密测量和智能识别的核心基础。本文将深…

2026/7/7 7:46:36 阅读更多 →
读地藏经好处 - 番外篇一(背诵古文)

读地藏经好处 - 番外篇一(背诵古文)

每周背一些对自己有用的语录,提高自己品德。用识典古籍app搜索的。2026年1月4日曾国藩六戒:第一戒:久利之事勿为,众争之地勿往第二戒:勿以小恶弃人大美,勿以小怨忘人大恩第三戒:说人之短乃护己之…

2026/7/6 10:30:42 阅读更多 →
【GitHub项目推荐--Tunnelto:高性能本地服务隧道工具】⭐⭐⭐

【GitHub项目推荐--Tunnelto:高性能本地服务隧道工具】⭐⭐⭐

简介 Tunnelto​ 是一个开源、高性能的本地服务隧道工具,由开发者agrinman创建和维护。这个项目采用Rust语言编写,完全基于异步I/O架构构建在tokio运行时之上,专为开发者提供简单、安全、可靠的方式将本地运行的Web服务暴露到公共互联网。自…

2026/7/5 22:55:47 阅读更多 →

最新新闻

博物馆文物低蓝光照明改造为什么首选KNX?系统方案、优势与行业避坑指南

博物馆文物低蓝光照明改造为什么首选KNX?系统方案、优势与行业避坑指南

一、引言:文物照明改造,不止“调亮调暗”这么简单博物馆日常运维里,光照对展品的损害是持续累积的,尤其书画、古籍、丝织品、壁画这类光敏材质,照度不准、光谱不对,时间一长就是褪色、脆化、剥落&#xff0…

2026/7/7 7:46:03 阅读更多 →
3分钟上手Real-ESRGAN-ncnn-vulkan:打造高性能图像超分辨率神器

3分钟上手Real-ESRGAN-ncnn-vulkan:打造高性能图像超分辨率神器

3分钟上手Real-ESRGAN-ncnn-vulkan:打造高性能图像超分辨率神器 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: https://gitcod…

2026/7/7 7:46:03 阅读更多 →
Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣

Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣

Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/g…

2026/7/7 7:44:03 阅读更多 →
专业的EMBA综合实力TOP5榜单深度评测

专业的EMBA综合实力TOP5榜单深度评测

一、评测引言随着国内企业全球化布局加速、数字化转型深入,兼具国际化视野与本土落地能力的中英双语EMBA项目,成为企业创始人、高层管理者突破管理瓶颈、搭建全球资源网络的核心选择。当前市场EMBA项目品类繁杂,内地高校、港澳院校项目各有优…

2026/7/7 7:40:02 阅读更多 →
多机器人路径规划为何要抛弃Sum of Costs?执行时间可预测性才是工业核心

多机器人路径规划为何要抛弃Sum of Costs?执行时间可预测性才是工业核心

1. 为什么Sum of Costs在多机器人调度中越来越“不准”了?我第一次在物流分拣中心看到那套号称“最优”的多机器人路径规划系统时,心里就打了个问号。系统输出的Sum of Costs(所有机器人路径长度之和)是237.8秒,现场工…

2026/7/7 7:40:02 阅读更多 →
百度网盘直链解析工具:三步获取高速下载链接的完整指南

百度网盘直链解析工具:三步获取高速下载链接的完整指南

百度网盘直链解析工具:三步获取高速下载链接的完整指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾因百度网盘的下载速度而烦恼?非会员用户…

2026/7/7 7:38:02 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻