C++迭代器浅析

news/2025/1/7 17:33:18/

迭代器是什么

迭代器是指向元素范围(如数组或容器)中的某个元素的任何对象,它能够使用一组运算符(至少包括++和&运算符)遍历该范围的元素。

迭代器最明显的形式是指针:指针可以指向数组中的元素,并可以使用++循环访问它们。每个容器类型都有一个特定的迭代器类型,用于循环访问其元素。

迭代器一般实现为容器的嵌套类型,在容器内部提供具体的实现。但是容器不同,底层元素遍历的方式也不同,迭代器提供常用的operator!=,operator++,operator*等运算符的重载函数,将迭代器封装在运算符重载中,在用户端的使用方式上是一致的,但是底层的实现方式并不相同
 

迭代器按照定义分为以下四种

1) 正向迭代器

容器类名::iterator  迭代器名;


2) 常量正向迭代器

容器类名::const_iterator  迭代器名;


3) 反向迭代器

容器类名::reverse_iterator  迭代器名;


4) 常量反向迭代器

容器类名::const_reverse_iterator  迭代器名;

迭代器作用

通过迭代器可以读取它指向的元素,*迭代器名就表示迭代器指向的元素。通过非常量迭代器还能修改其指向的元素。

迭代器都可以进行++操作。反向迭代器和正向迭代器的区别在于:

  • 对正向迭代器进行++操作时,迭代器会指向容器中的后一个元素;
  • 而对反向迭代器进行++操作时,迭代器会指向容器中的前一个元素。
void test_3()
{vector<int> v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);v1.push_back(7);v1.push_back(9);vector<int>::iterator it = v1.begin();//正向迭代器while (it != v1.end()){cout << *it << " ";it++;}cout << endl;auto rit = v1.rbegin();//反向迭代器while (rit != v1.rend()){cout << *rit << " ";rit++;}cout << endl;
}

 常量迭代器与普通迭代器区分

1.typedef T* iterator;
2.typedef const iterator const_iterator;
3.typedef const T* const_iterator;
方式1方式2方式3
说明迭代器的本质上是一个指针相当于T* const。const修饰iterator,说明iterator本身不可被修改,迭代器指向的内容可以被修改const修饰T*,说明指针指向的内容不可以被修改,但是迭代器还是可以进行++等操作

因此普通迭代器的实现用方式1实现,常迭代器用方式3实现。

方式二的实现方式是错误的


http://www.ppmy.cn/news/51640.html

相关文章

网络系统管理Linux服务部署 试卷

网络系统管理赛项 - 模块 C : Linux 部署 2 / 14 目 录 一、竞赛说明........................................................4 二、初始化环境......................................................4 (一)默认账号及默认密码 ...............................…

三顾茅庐,七面阿里,成功上岸25k16薪,我行你也行~

写在片头&#xff1a;声明&#xff0c;勿杠 首先简单说一下&#xff0c;这三次面试阿里并不是一次性去面的&#xff0c;实际上第一次面试时候还在大四&#xff0c;找的实习岗&#xff0c;不太清楚是什么部门&#xff0c;别问我为什么还记得面试题&#xff0c;有记录和复盘的习惯…

React-Redux详解

React-Redux详解 前言 React-Redux是一个用于在React应用中管理状态的第三方库。它是基于Redux架构的&#xff0c;提供了一种在React应用中高效管理状态的方式。React-Redux通过将Redux的核心概念和React组件相结合&#xff0c;使得在React应用中使用Redux变得更加简单和方便。…

关于ffmpeg的使用过程中遇到的点(php)

有段日子没更新&#xff0c;最近使用ffmepg&#xff0c;这里记录一下 我这边就直说一下我工作中遇到的注意事项和使用方法&#xff0c;就不太详细说了 首先是安装的问题&#xff0c;windwos的话比较简单&#xff0c;官网下载安装文件&#xff0c;解压之后。设置环境变量 系统…

h5逻辑_解决h5页面嵌入ios兼容性问题

安全区域 如下图所示&#xff5e; 蓝色部分为安全区域。处于安全区域内的内容不受圆角、齐刘海、小黑条的影响。 若是将h5页面嵌入app中&#xff0c;就需要进行适配—> 让h5页面展示在安全区域内。 tips: 安全区域是在ios11之后并且是iPhoneX及以上机型才有的。 因此我们只…

《回顾活动引导:24个反模式与重构实践》读后感

《回顾活动引导&#xff1a;24个反模式与重构实践》读后感 前提 看过《敏捷回顾活动&#xff1a;团队从优秀到卓越之道》&#xff1b;其实我没看过 &#x1f600; 最高指导原则&#xff1a;理解并坚信每个人对自己的工作都已全力以赴拉斯维加斯规则&#xff1a;在回顾会上分享…

Java基础--->集合详解

文章目录 集合CollectionListSet MapHashMapHashtableLinkedHashMapTreeMap 集合 Collection ​ Collection一般存储的是列表数据 List ​ List存储的数据是有序可重复的 ArrayList ​ ArrayList数组存储&#xff0c;可以动态扩容&#xff0c;适合大量查找&#xff0c;线…

Linearx配置环境

代码地址 gitssh.dev.azure.com:v3/linearx/PowerDDS/PowerDDS LinearX-5G Wifi pwd: 50186058 Windows报错可以搜索错误代码找官方给出的解决方案 最新版本cmake&#xff1a;ubuntu 20.04安装(升级)cmake - 知乎 (zhihu.com) gtest&#xff1a;gtest的安装_liuzubing的博客…