讲师中心 微信公众号
AI工具推荐 视频效率加速

c++中迭代器(iterator)是什么_STL迭代器概念与使用方法详解

秋芳同学_4906

秋芳同学_4906

发布时间:2025-09-22 19:26:01

|

1039人浏览过

|

来源于php中文网

原创

迭代器是C++ STL中用于访问容器元素的通用机制,类似于指针,可遍历和操作数据。它统一了不同容器的访问方式,支持解引用、递增、递减、比较等操作。STL定义五类迭代器:输入、输出、前向、双向和随机访问迭代器,功能由弱到强。vector、list、map等容器提供begin()、end()等方法获取迭代器,用于正向或反向遍历。C++11支持auto简化声明,范围for循环底层也基于迭代器实现。使用时需注意避免解引用end()、容器修改导致迭代器失效等问题,尤其是插入删除后原迭代器可能无效,引发未定义行为。迭代器是STL算法与容器之间的桥梁,广泛应用于sort、find等算法中,掌握其用法可提升C++编程效率。

c++中迭代器(iterator)是什么_stl迭代器概念与使用方法详解

迭代器(Iterator)是C++ STL中用于访问容器元素的一种通用机制,它类似于指针,可以指向容器中的某个元素,并通过递增、递减等操作遍历整个容器。理解迭代器是掌握STL使用的关键一步。

迭代器的基本概念

迭代器是一种抽象的概念,它将“遍历”和“访问”数据的方式统一起来。不同的容器(如vector、list、set等)内部结构不同,但都可以通过迭代器以相同的方式进行访问。

你可以把迭代器看作是一个指向容器中元素的“游标”,通过它可以读取或修改元素值,并能移动到下一个或上一个位置。

每种STL容器都定义了自己的迭代器类型,例如:

立即学习“C++免费学习笔记(深入)”;

  • vector::iterator:用于 vector 容器
  • list::iterator:用于 list 容器
  • map::iterator:用于 map 容器

所有迭代器都支持一些基本操作:

  • *it:解引用,获取当前指向的元素值
  • ++it 或 it++:向前移动一位
  • --it 或 it--:向后移动一位(部分迭代器不支持)
  • it1 == it2:判断两个迭代器是否指向同一位置
  • it1 != it2:判断是否指向不同位置

常见迭代器类型

根据功能强弱,STL将迭代器分为五类:

  • 输入迭代器(Input Iterator):只能读取一次数据,单向移动(如istream_iterator)
  • 输出迭代器(Output Iterator):只能写入数据,单向移动(如ostream_iterator)
  • 前向迭代器(Forward Iterator):可多次读写,仅支持 ++ 操作(如slist、unordered容器)
  • 双向迭代器(Bidirectional Iterator):支持 ++ 和 --,可前后移动(如list、set、map)
  • 随机访问迭代器(Random Access Iterator):支持指针算术运算,如 +n、-n、[n] 等(如vector、deque)

功能由弱到强,vector 的迭代器是最强大的之一。

Web Accessibility (WCAG 2 AA))
Web Accessibility (WCAG 2 AA))

将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。

下载

迭代器的使用方法

大多数容器提供以下成员函数来获取迭代器:

  • begin():返回指向第一个元素的迭代器
  • end():返回指向最后一个元素后一个位置的迭代器(即尾后迭代器)
  • rbegin() / rend():反向迭代器,用于逆序遍历

示例:用迭代器遍历vector

#include <iostream>
#include <vector>
using namespace std;
<p>int main() {
vector<int> nums = {1, 2, 3, 4, 5};</p><pre class='brush:php;toolbar:false;'>for (vector<int>::iterator it = nums.begin(); it != nums.end(); ++it) {
    cout << *it << " ";
}
cout << endl;

return 0;

}

C++11 起可用 auto 简化写法:

for (auto it = nums.begin(); it != nums.end(); ++it) {
    cout << *it << " ";
}

范围for循环(底层仍使用迭代器):

for (const auto& val : nums) {
    cout << val << " ";
}

注意事项与常见错误

使用迭代器时要注意以下几点:

  • 不要对 end() 进行解引用 —— 它不指向有效元素
  • 容器修改后(如插入、删除),原有迭代器可能失效
  • 不同容器的迭代器能力不同,比如 vector 不支持 -- 操作在某些情况下会出错
  • 避免使用已失效的迭代器,否则引发未定义行为

示例:迭代器失效问题

vector<int> v = {1, 2, 3, 4};
auto it = v.begin();
v.push_back(5);  // 可能导致内存重新分配,原 it 失效
cout << *it;     // 错误!使用了失效的迭代器

基本上就这些。迭代器是连接算法和容器的桥梁,STL中的很多算法(如sort、find、copy)都依赖迭代器工作。掌握它的使用方式,能让你更高效地编写C++代码。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1138

2023.09.04

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

379

2026.04.23

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

630

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

343

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

533

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

303

2025.11.27

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

854

2023.11.24

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

6236

2023.08.14

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn