C++中的迭代器(iterator)怎么用?C++遍历STL容器的方法【教程】
发布时间 - 2026-01-02 00:00:00 点击率:次迭代器是C++中访问STL容器元素的核心工具,本质为泛化的指针,支持统一遍历、插入和删除操作;每个容器提供begin()和end()函数,其中end()指向末元素后位置,不可解引用。
迭代器是C++中访问STL容器元素的核心工具,本质是泛化的指针,能统一操作不同容器(如vector、list、map)的遍历、插入和删除。
基础用法:声明、解引用与移动
每个STL容器都提供 begin() 和 end() 成员函数,返回对应类型的迭代器。注意:end() 指向最后一个元素之后的位置,不是有效元素,遍历时不能解引用。
常见操作示例:
- vector
v = {10, 20, 30}; - auto it = v.begin(); // 推荐用 auto 简化类型书写
- cout
- ++it; // 移动到下一个位置(前缀++更高效)
- it != v.end() // 循环条件:只要没到末尾就继续
常用遍历写法(3种推荐方式)
根据需求选择合适风格,兼顾可读性与安全性:
-
传统 for + 迭代器:适合需要索引或中途修改容器时
for (auto it = c.begin(); it != c.end(); ++it) { cout -
基于范围的 for 循环(C++11起):最简洁,自动处理迭代器,推荐日常使用
for (const auto& x : c) { cout // const auto& 避免拷贝 -
std::for_each + lambda(算法头文件):函数式风格,适合逻辑稍复杂时
for_each(c.begin(), c.end(), [](int x) { cout
不同容器的迭代器类型要注意
不是所有迭代器都支持相同操作。比如:
- vector / deque / array:支持随机访问(it += 3、it[2]),可用 随机访问迭代器
- list / forward_list:只支持前后移动(++it、--it),属于 双向/单向迭代器,不支持 + 5 或下标
- unordered_map / set:迭代器遍历顺序不确定(哈希表无序),但仍是有效的双向迭代器
安全提醒:避免野迭代器
容器被修改(如 erase、clear、resize、push_back 引发扩容)后,原有迭代器可能失效:
-
vector:插入/删除中间元素会使后续迭代器失效;erase 返回下一个有效迭代器,应这样写:
it = c.erase(it); // 删除当前并指向下一位置 - list:只有被删节点的迭代器失效,其他仍有效
- 循环中删除元素时,别盲目 ++it,优先用 erase 的返回值更新
基本上就这些。掌握 begin/end
、解引用、移动和失效规则,就能稳妥用好迭代器。不复杂但容易忽略细节,多写几遍就成直觉了。
# 工具
# c++
# 成员函数
# auto
# 指针
# map
# 迭代
# 遍历
# 就能
# 要注意
# 下一
# 不支持
# 会使
# 不确定
# 但仍
# 没到
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何在Windows服务器上快速搭建网站?
Swift中循环语句中的转移语句 break 和 continue
Firefox Developer Edition开发者版本入口
Laravel集合Collection怎么用_Laravel集合常用函数详解
如何在IIS中新建站点并解决端口绑定冲突?
教学论文网站制作软件有哪些,写论文用什么软件
?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Python3.6正式版新特性预览
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
详解vue.js组件化开发实践
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何在香港免费服务器上快速搭建网站?
Linux安全能力提升路径_长期防护思维说明【指导】
浅述节点的创建及常见功能的实现
使用豆包 AI 辅助进行简单网页 HTML 结构设计
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
如何在 React 中条件性地遍历数组并渲染元素
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel如何实现事件和监听器?(Event & Listener实战)
如何在建站之星绑定自定义域名?
java ZXing生成二维码及条码实例分享
如何快速配置高效服务器建站软件?
如何快速选择适合个人网站的云服务器配置?
深圳网站制作的公司有哪些,dido官方网站?
如何快速完成中国万网建站详细流程?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
如何利用DOS批处理实现定时关机操作详解
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
制作旅游网站html,怎样注册旅游网站?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
如何用西部建站助手快速创建专业网站?
如何快速搭建支持数据库操作的智能建站平台?
Python文件流缓冲机制_IO性能解析【教程】
七夕网站制作视频,七夕大促活动怎么报名?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
网站制作软件有哪些,制图软件有哪些?
如何用免费手机建站系统零基础打造专业网站?
Laravel如何发送系统通知?(Notification渠道示例)
lovemo网页版地址 lovemo官网手机登录
Laravel如何配置和使用缓存?(Redis代码示例)
上一篇:巴乐兔租房app缴纳电费方法
上一篇:巴乐兔租房app缴纳电费方法

