0

0

c++中的迭代器iterator是什么_c++迭代器概念与使用方法

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-11-17 15:13:02

|

425人浏览过

|

来源于php中文网

原创

迭代器是C++ STL中用于访问容器元素的对象,类似指针,支持遍历和解引用。它将算法与容器解耦,实现通用操作。STL定义五种迭代器:输入、输出、前向、双向和随机访问迭代器,功能依次增强。常用begin()和end()获取迭代范围,C++11起推荐auto简化声明,还可使用范围for循环。注意避免解引用end(),容器修改后迭代器可能失效,不同容器迭代器能力不同需谨慎选择算法。

c++中的迭代器iterator是什么_c++迭代器概念与使用方法

在C++中,迭代器(iterator)是一种用于访问容器元素的对象,它类似于指针,可以指向容器中的某个元素,并通过递增或递减操作遍历整个容器。迭代器是STL(标准模板库)的核心组成部分之一,它将算法与容器解耦,使通用算法可以适用于不同类型的容器。

迭代器的基本概念

迭代器本质上是一个“泛化的指针”。它提供了一种统一的方式来访问容器中的数据,而不需要关心容器的具体实现方式。比如,你可以用同样的方式遍历vector、list、set等不同容器。

每种STL容器都定义了自己的迭代器类型,通常通过container::iteratorcontainer::const_iterator来获取。

常见迭代器类型

C++定义了五种迭代器类别,按功能由弱到强排列

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

  • 输入迭代器(Input Iterator):只能向前移动,用于读取数据(如istream_iterator)
  • 输出迭代器(Output Iterator):只能向前移动,用于写入数据(如ostream_iterator)
  • 前向迭代器(Forward Iterator):可多次读写,只能向前遍历(如slist)
  • 双向迭代器(Bidirectional Iterator):可前后移动(如list、set、map)
  • 随机访问迭代器(Random Access Iterator):支持指针算术运算,可任意跳转(如vector、deque、数组)

迭代器的基本使用方法

以下是一个使用vector迭代器的简单示例:

#include 
#include 
using namespace std;

int main() {
    vector nums = {1, 2, 3, 4, 5};

    // 使用迭代器遍历
    for (vector::iterator it = nums.begin(); it != nums.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

说明:

  • begin() 返回指向第一个元素的迭代器
  • end() 返回指向最后一个元素后位置的迭代器(不指向有效元素)
  • *it 解引用操作,获取当前指向的元素值
  • ++it 移动到下一个元素

从C++11开始,推荐使用auto简化声明:

NeuralText
NeuralText

Neural Text是一个使用机器学习自动生成文本的平台

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

还可以使用范围for循环(更简洁):

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

常量迭代器与反向迭代器

如果不需要修改元素,建议使用const_iterator

for (auto it = nums.cbegin(); it != nums.cend(); ++it) {
    // 只读访问
}

使用反向迭代器从后往前遍历:

for (auto rit = nums.rbegin(); rit != nums.rend(); ++rit) {
    cout << *rit << " ";
}

注意:rbegin() 指向最后一个元素,rend() 指向第一个元素之前的位置。

注意事项

使用迭代器时需注意:

  • 不要对end()返回的迭代器进行解引用
  • 容器发生插入或删除操作后,原有迭代器可能失效
  • 不同容器的迭代器能力不同,选择合适算法时要注意限制

基本上就这些。掌握迭代器是学习STL的关键一步,理解其原理和用法有助于写出更通用、高效的C++代码。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

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

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

74

2025.09.05

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

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

28

2025.11.16

golang map原理
golang map原理

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

59

2025.11.17

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

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

35

2025.11.27

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

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

180

2023.11.24

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

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

400

2023.08.14

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

322

2023.10.09

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

4

2026.01.14

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

ECMAScript6 / ES6---十天技能课堂
ECMAScript6 / ES6---十天技能课堂

共25课时 | 1.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号