当前位置: 首页 > news >正文

C++中的迭代器

目录

摘要

迭代器类别

1. 输入迭代器(Input Iterator)

2. 输出迭代器(Output Iterator)

3. 前向迭代器(Forward Iterator)

4. 双向迭代器(Bidirectional Iterator)

5. 随机访问迭代器(Random Access Iterator)

总结

引用


摘要

在 C++ 中,迭代器(iterator)是用于遍历容器(如数组、链表、向量等)元素的对象。标准库(STL)中迭代器是一个重要的概念,类似于指针,但功能更强大。

根据不同的功能和特性,迭代器大致可以分为以下几类:

迭代器类别

- 输入迭代器(Input Iterator
- 输出迭代器(Output Iterator
- 前向迭代器(Forward Iterator
- 双向迭代器(Bidirectional Iterator
- 随机访问迭代器(Random Access Iterator

1. 输入迭代器(Input Iterator)

输入迭代器用于读取数据。它们支持只读访问,每个元素只能读取一次。

#include <iostream>
#include <vector>
#include <iterator>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int>::iterator it = vec.begin();std::cout << "Using input iterator: ";while (it != vec.end()) {std::cout << *it << " ";++it;}std::cout << std::endl;return 0;
}

2. 输出迭代器(Output Iterator)

输出迭代器用于写入数据。它们支持只写访问,每个元素只能写入一次。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>int main() {std::vector<int> vec(5);std::ostream_iterator<int> out_it(std::cout, " ");for (int i = 0; i < 5; ++i) {vec[i] = i + 1;}std::cout << "Using output iterator: ";std::copy(vec.begin(), vec.end(), out_it);std::cout << std::endl;return 0;
}

3. 前向迭代器(Forward Iterator)

前向迭代器支持读写访问,并且可以多次遍历同一个元素,可以向前移动。

#include <iostream>
#include <forward_list>int main() {std::forward_list<int> flist = {1, 2, 3, 4, 5};std::forward_list<int>::iterator it;std::cout << "Using forward iterator: ";for (it = flist.begin(); it != flist.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

4. 双向迭代器(Bidirectional Iterator)

双向迭代器支持读写访问,可以向前和向后移动。

#include <iostream>
#include <list>int main() {std::list<int> lst = {1, 2, 3, 4, 5};std::list<int>::iterator it;std::cout << "Using bidirectional iterator (forward): ";for (it = lst.begin(); it != lst.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;std::cout << "Using bidirectional iterator (backward): ";for (it = lst.end(); it != lst.begin();) {--it;std::cout << *it << " ";}std::cout << std::endl;return 0;
}

5. 随机访问迭代器(Random Access Iterator)

随机访问迭代器支持读写访问,并且可以以常数时间进行任意跳转,提供了类似指针的算术运算功能。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::vector<int>::iterator it = vec.begin();std::cout << "Using random access iterator: ";for (size_t i = 0; i < vec.size(); ++i) {std::cout << *(it + i) << " ";}std::cout << std::endl;std::cout << "Using random access iterator for arithmetic operations: ";it += 2;std::cout << *it << " ";it -= 1;std::cout << *it << std::endl;return 0;
}

总结

1. 有效性:确保迭代器在使用过程中始终有效。例如,插入或删除元素后,某些容器的迭代器可能失效。
2. 边界检查:使用迭代器时,要注意不要超出容器的边界,否则可能会导致泄漏问题。
3. 类型匹配:使用合适的迭代器类型来匹配容器类型。
4. 算法和迭代器:STL 算法通常使用迭代器作为参数,确保传递的迭代器满足算法的要求。

在C++ 中,迭代器提供了一种通用的方式来遍历和操作容器中的元素。根据我们实际开发项目不同的需求,选择合适的迭代器可以更有效地进行数据操作和算法应用。

引用

Iterator library - cppreference.com

http://www.lryc.cn/news/361355.html

相关文章:

  • 8.1 Go 包的概念与使用
  • 第一篇【传奇开心果系列】AI工业应用经典算法和Python示例:基于AI的智能制造技术经典算法与Python实践
  • Mathtype插入编号的高级格式会重置之前的简单格式的问题
  • 弘君资本:存储芯片概念强势,西测测试三连板,佰维存储涨超10%
  • 【机器学习】逻辑回归:原理、应用与实践
  • C++:list模拟实现
  • 植物大战僵尸杂交版全平台 PC MAC 安卓手机下载安装详细图文教程
  • 发送Http请求的两种方式
  • 【算法训练记录——Day23】
  • 【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示
  • NTLM Relay Gat:自动化NTLM中继安全检测工具
  • 摸鱼大数据——Hive函数14
  • elasticsearch的常规操作--增删改查和批量处理
  • 盘点2024年还在活跃发版的开源私有网盘项目附源码链接
  • MySQL 使用方法以及教程
  • 算法学习笔记——二进制
  • 计算机网络介绍
  • 解锁数据宝藏:高效查找算法揭秘
  • 利用EasyCVR视频智能监控技术,构建智慧化考场监管体系
  • 深度解析:速卖通618风控下自养号测评的技术要点
  • 国产算力——沐曦GPU性能及应用
  • 贪心算法拓展(反悔贪心)
  • 在spring框架的基础上自定义autowired注解
  • 2005NOIP普及组真题 3. 采药
  • preventDefault()与stopPropagation()有什么区别?
  • AIGC 全面介绍
  • 网站入门:Flask用法讲解
  • 头歌数据库备份与恢复
  • 小程序项目创建与Vant-UI引入
  • xtrabackup 使用