首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STLreverse_iterator反向迭代器的实现

1、反向迭代器介绍 1.1、前言 在前文中我们已经讲过STL中的适配器概念,即在底层将一个类的接口转化为另一个类的接口,并根据此设计模式模拟实现了stack与queue。...1.2、反向迭代器 我们都知道迭代器作为STL六大组件之一,主要目的是为了可以像原生指针一样,实现对容器成员的遍历和访问。但是我们在此之前所讲的以及实现的都是从前往后的正向迭代器。...如下所示: 2.1.3、* 运算符重载 在实现对*的重载之前,我们首先要了解一下反向迭代器的结构,在STL中,反向迭代器是与正向迭代器一一对应,如下所示: 但是呢,这里就出现了一个问题,因为在SGI版本的...STL中,迭代器区间有一个习惯,即:前闭后开。

8610

【C++】反向迭代器

文章目录 一、什么是反向迭代器 二、STL 源码中反向迭代器的实现 三、reverse_iterator 的模拟实现 四、vector 和 list 反向迭代器的实现 一、什么是反向迭代器 C++ 中一共有四种迭代器...---- 二、STL 源码中反向迭代器的实现 我们可以通过参考 STL 源码中反向迭代器的实现方式来学习如何实现反向迭代器,如下: //list.h部分源码 -- SGI版 template reverse_iterator; 可以看到,STL 源码中 vector 和 list 的反向迭代器都是 reverse_iterator 类的 typedef,而 reverse_iterator...类位于源码中的 stl_iterator.h 中,其部分源码如下: //stl_iterator.h -- SGI版 template class reverse_iterator...与非 const),所以我们不能确定函数的返回值;STL 源码中使用迭代器萃取的方法来解决这个问题,如下: //stl_iterator.h部分源码 template

85600
您找到你想要的搜索结果了吗?
是的
没有找到

10.1 C++ STL 模板适配与迭代器

STL(Standard Template Library)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。...而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,通过迭代器可以遍历STL容器中的元素。...提供的两种迭代器适配器,它们分别用于将输入流和输出流封装成迭代器的形式,以便于使用STL提供的算法函数处理输入和输出流。...是STL提供的一种用于反向迭代器的适配器。...它能够处理正向容器,并将其转换为反向容器,这使得可以使用STL通用算法从容器的末尾向前遍历。 一个reverse_iterator对象接受一个普通迭代器参数,并将该迭代器反转。

17710

10.1 C++ STL 模板适配与迭代器

STL(Standard Template Library)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。...而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,通过迭代器可以遍历STL容器中的元素。...提供的两种迭代器适配器,它们分别用于将输入流和输出流封装成迭代器的形式,以便于使用STL提供的算法函数处理输入和输出流。...是STL提供的一种用于反向迭代器的适配器。...它能够处理正向容器,并将其转换为反向容器,这使得可以使用STL通用算法从容器的末尾向前遍历。一个reverse_iterator对象接受一个普通迭代器参数,并将该迭代器反转。

17920

C++ STL学习之【反向迭代器】

---- 前言 适配器模式是 STL 中的重要组成部分,在上一篇文章中我们学习了 容器适配器 的相关知识,即 stack 与 queue,除了 容器适配器 外,还有 迭代器适配器,借助 迭代器适配器,可以轻松将各种容器中的普通迭代器转变为反向迭代器...rbegin() { reverse_iterator(end()); } //开始 -> 尾 reverse_iterator rend() { reverse_iterator(begin());...const_reverse_iterator; reverse_iterator rbegin() { return reverse_iterator(end()); } reverse_iterator...const_reverse_iterator; reverse_iterator rbegin() { return reverse_iterator(end()); } reverse_iterator...访问自定义类型中的成员变量 ---- 4、源码 关于 vector 和 list (迭代器版)的源码在下面仓库中 vector(反向迭代器版) list(反向迭代器版) ---- 总结 以上就是本篇关于 C++ STL

12720

迭代器iterator

迭代器iterator的使用 迭代器iterator是一个额外的、独立数据结构,存在于STL库中。专门用于访问STL中各个数据结构中的元素。...此处应使用const_iterator 迭代器的使用方法 使用迭代器的时候要指明被访问的数据结构类型 //此处以string对象为例 string::iterator ite; STL中的数据结构,都具有相关的成员函数...,获取到自己元素的迭代器 以string为例: string::begin()获取首字符的迭代器 string::end()获取最后一个有效字符的下一个字符(即结束字符,也就是’\0’)的迭代器 STL...it_left = s1.begin();//获取首元素 string::iterator it_right = s1.end();//获取最后一个有效字符的后一个字符,即结束字符\0 普通反向迭代器 reverse_iterator...与正向迭代器的起点、终点、移动方向正好相反 string::reverse_iterator re_it_left = s1.rbegin();//获取最后一个有效元素 string::reverse_iterator

6110

【C++】STL——反向迭代器的模拟实现:迭代器适配器

而且我们在当前stl_list.h这个头文件里并没有找到reverse_iterator这个类模板的定义! 那我们就需要继续去源码里面找,所以看源码其实并不是一件舒服的事情,或者说是比较痛苦的。...那reverse_iterator这个类模板的实现其实是在另一个头文件stl_iterator.h里面: 那reverse_iterator 这个类呢,其实是一个适配器,是一个迭代器适配器。...那这时候我们就要去看它里面的实现了,我们回到stl_list.h看到它的rbegin和rend是这样的: rbegin 是end的位置, rend 是begin的位置,我们拿begin和end来对比一下...reverse_iterator rend() { return reverse_iterator(_head); }*/ reverse_iterator rbegin()...{ return reverse_iterator(end()); } reverse_iterator rend() { return reverse_iterator(begin

11910

3.1 C++ STL 双向队列容器

双向队列容器(Deque)是C++ STL中的一种数据结构,是一种双端队列,允许在容器的两端进行快速插入和删除操作,可以看作是一种动态数组的扩展,支持随机访问,同时提供了高效的在队列头尾插入和删除元素的操作...3.1 单向队列的基本操作这是一段使用STL queue容器的C++代码,展示了如何定义并操作queue队列,包括如何向队列中添加元素、弹出元素、查询队头、队尾信息以及获取队列大小。...代码使用reverse_iterator类型的迭代器实现了双端队列的反向遍历。由于双端队列底层实现是双向链表,因此支持反向遍历。最后,代码使用cout输出遍历时访问到的每个元素的值。...= end; start++) cout ::reverse_iterator...= deq.end(); item++) { // 迭代器类型: iterator=>普通迭代器 reverse_iterator=>逆序迭代器 const_iterator=>只读迭代器

29720

3.1 C++ STL 双向队列容器

双向队列容器(Deque)是C++ STL中的一种数据结构,是一种双端队列,允许在容器的两端进行快速插入和删除操作,可以看作是一种动态数组的扩展,支持随机访问,同时提供了高效的在队列头尾插入和删除元素的操作...3.1 单向队列的基本操作 这是一段使用STL queue容器的C++代码,展示了如何定义并操作queue队列,包括如何向队列中添加元素、弹出元素、查询队头、队尾信息以及获取队列大小。...代码使用reverse_iterator类型的迭代器实现了双端队列的反向遍历。由于双端队列底层实现是双向链表,因此支持反向遍历。 最后,代码使用cout输出遍历时访问到的每个元素的值。...; start++) cout << (*start) << " " ; cout << endl; // 双向队列的反向遍历: 此处我们使用迭代器遍历 deque::reverse_iterator...= deq.end(); item++) { // 迭代器类型: iterator=>普通迭代器 reverse_iterator=>逆序迭代器 const_iterator=>只读迭代器

24720

【C++】STL 标准模板库 ③ ( STL 容器简介 | STL 容器区别 | STL 容器分类 | 常用的 STL 容器 )

一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型的 STL 容器 的区别 主要是 节点 和 节点之间的关系模型 不同 ; 容器的内存空间是否连续 : 向量...插入到中间 , 插入到首部 , 插入到尾部 ; 容器中的元素移除限制 : 是否允许 移除中间元素 , 移除首部元素 , 移除尾部元素 ; 数据结构 主要是 研究 节点 与 节点 之间关系的 ; 2、STL...容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers , 容器中每个元素的位置都是固定的 , 元素的位置取决于插入元素的...Set , 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器的元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用的 STL...容器 常用的 STL 容器 : 向量 vector : 是连续存储的元素 , 其内存是连续的 ; 可以 访问和修改任意元素 , 但在 序列尾部 进行 插入 和 删除时 , 具有常量时间复杂度 ; 需导入

34830

STL

STL:泛型程序设计(程序的通用性) 1、STL定义 STL(标准模板库)惠普实验室开发的一系列软件的统称。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。...STL现在是C++的一部分,被内建在你的编译系统之内。...2、STL头文件 在C++标准中,STL被组织为下面的17个头文件:、、、、、、<list...3、组成部分: STL可分为容器、迭代器、空间配置器、配接器、算法、仿函数六个部分。 容器部分主要由头文件、、、、 、以及组成。...适配器(改变对应接口的组件): 适配器,在STL中扮演着转换器的角色,本质上是一种设计模式,用于一种接口转换成另一种接口,从而使原本不兼容的接口能够很好地一起运作。

81730

List类的超详细解析!(超2w+字)

构造节点 以 stl3.0 版本为例,我们来模拟它的阉割版哈哈~~ 首先,为了做到通用,显然在 C++ 中就得借助 模板 来实现通用!...通过内嵌类型实现反向迭代器 我们上面的自主实现版本是用了传了三个参数的模板,而 stl3.0中其实只传了一个参数 iterator 而已,这是怎么做到的呢?...stl 中是这么做的,他在其中定义了一个内嵌类型: 把 Ptr 和 Ref 定义成了 pointer 和 reference,这样我们就可以从内嵌类型中去取这个类型了。...但是 STL 是非常复杂的,它还要考虑去兼顾全局,不是说只有迭代器和容器, 像 vector、string 这样的容器的迭代器是原生指针,无法取内嵌类型。那么上面的方式就寄了。...浅谈迭代器萃取 基于上面内嵌类型的原因,STL 源码中使用了一个叫 “迭代器萃取” 的技术解决的。

62930
领券