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 += 3it[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代码示例)