
[C++系列] 49. C++迭代器(STL迭代器)iterator详解
发布日期:2021-05-12 23:13:46
浏览次数:22
分类:精选文章
本文共 1894 字,大约阅读时间需要 6 分钟。
C++ STL 迭代器详解
1. 迭代器概述
在 C++ 标准图书馆(STL)中,迭代器(iterator)是连接容器与算法的重要桥梁。它允许我们通过统一的接口操作各种顺序容器和关联容器中的元素。迭代器类似于指针,但它提供了更高级别的操作,适用于各种容器类型。
迭代器的核心作用是提供对容器元素的访问和操作能力。通过迭代器,我们可以高效地遍历、读取和修改容器中的元素,而无需直接操作容器内部的数据结构。
2. 迭代器的定义与类型
迭代器的定义方式因容器类型而异。常见的迭代器类型包括:
2.1 正向迭代器
- 定义:
container::iterator iter_name;
- 特点:支持读取和写入操作,仅支持自增(
++
)操作。
2.2 常量正向迭代器
- 定义:
container::const_iterator iter_name;
- 特点:与正向迭代器类似,但只支持读取操作。
2.3 反向迭代器
- 定义:
container::reverse_iterator iter_name;
- 特点:反转了正向迭代器的操作方向,
++
运算将迭代器指向前一个元素。
2.4 常量反向迭代器
- 定义:
container::const_reverse_iterator iter_name;
- 特点:与反向迭代器类似,但只支持读取操作。
3. 迭代器的操作与用法
迭代器的操作是其核心功能。以下是迭代器常见操作的示例:
3.1 基本操作
- 读取元素:
*iter
返回迭代器指向的元素。 - 移动操作:
++iter
(或iter++
)使迭代器指向下一个元素。
3.2 反向迭代器的特殊性
- 正向迭代器:
++iter
指向下一个元素。 - 反向迭代器:
++iter
指向前一个元素。
3.3 实际应用示例
以下程序展示了如何使用迭代器遍历和修改容器中的元素:
#include#include using namespace std;int main() { vector v; for (int i = 0; i < 5; ++i) { v.push_back(i); } vector ::iterator iter = v.begin(); for (iter = v.begin(); iter != v.end(); ++iter) { cout << *iter << " "; *iter *= 2; } vector ::reverse_iterator rev_iter = v.rbegin(); for (rev_iter = v.rbegin(); rev_iter != v.rend(); ++rev_iter) { cout << *rev_iter << " "; } return 0;}
程序输出结果为:0 1 2 3 48 6 4 2 0
。
4. 迭代器的高级功能
迭代器的功能不仅限于基本操作,还支持高级操作:
4.1 高级移动操作
advance(iter, n)
:将迭代器iter
前进n
个元素。distance(iter1, iter2)
:计算两个迭代器之间的距离。
4.2 元素交换
iter_swap(iter1, iter2)
:交换两个迭代器指向的元素。
5. 迭代器适配器
迭代器适配器允许迭代器与其他 STL 算法配合使用。常见的适配器包括插入迭代器、反向迭代器和流迭代器。
5.1 插入迭代器
插入迭代器用于将新元素插入到容器中。例如,insert_iterator
可以将元素插入到指定位置。
5.2 反向迭代器
反向迭代器提供从后向前的遍历方式。例如,rbegin()
返回最后一个元素的迭代器,rend()
返回第一个元素前面的迭代器。
5.3 流迭代器
流迭代器将输入输出流(如 istream
和 ostream
)当作数据源或接收器。例如,istream_iterator
可以从输入流读取数据。
6. 迭代器的应用场景
迭代器在 STL 中广泛应用于各种算法中。例如:
- 排序算法:如
sort()
函数依赖于随机访问迭代器。 - 查找算法:如
find()
函数使用迭代器进行元素查找。
通过选择合适的迭代器类型,可以实现对不同容器的高效操作。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月22日 07时42分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Meanshift,聚类算法
2025-04-13
media="screen"啥意思?
2025-04-13
media=screen是什么意思 有什么用?
2025-04-13
mediawiki
2025-04-13
MegaCli查看RIAD相关信息
2025-04-13
MEGER sentence in oracle
2025-04-13
Meikade开源项目常见问题解决方案
2025-04-13
Member var and Static var.
2025-04-13
Membership学习(二)membership入门[xgluxv]
2025-04-13
Memcache 查看列出所有key方法
2025-04-13
memcached——分布式内存对象缓存系统
2025-04-13
memcached分布式部署
2025-04-13
Memcached对象缓存详解
2025-04-13
Memcached常用操作
2025-04-13
memcached的LRU删除机制
2025-04-13
memcached缓存服务器的安装
2025-04-13
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
2025-04-13
memcached高速缓存学习笔记002---telnet操作memcached
2025-04-13
Memcached:Node.js 高性能缓存解决方案
2025-04-13