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

疯子算法总结(三) STL迭代(iterator) + 容器

定义:迭代是一种检查容器内元素并遍历元素数据类型。 迭代提供对一个容器对象访问方法,并且定义了容器对象范围。...(2)指针是C语言中知识点,迭代是C++知识点。指针较灵活,迭代功能较丰富。 (3)迭代提供一个对容器对象或者string对象访问方法,并定义了容器范围。...迭代和指针区别: 容器和string有迭代类型同时拥有返回迭代成员。...false p>=p1 p位置在p1后面或同一位置时返回true,否则返回false 只有顺序容器和关联容器支持迭代遍历,各容器支持迭代类别如下: 容器 支持迭代类别 说明 vector...,或重载“小于号”方式实现小根堆,通过懒惰删除法实现随机删除操作。

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

C++(STL):29 ---关联式容器map 迭代

无论是前面学习序列式容器,还是关联式容器,要想实现遍历操作,就必须要用到该类型容器迭代。当然,map 容器也不例外。...C++ STL 标准库为 map 容器配备是双向迭代(bidirectional iterator)。...成员方法 功能 begin() 返回指向容器第一个(注意,是已排好序第一个)键值对双向迭代。如果 map 容器用 const 限定,则该方法返回是 const 类型双向迭代。...find(key) 在 map 容器查找键为 key 键值对,如果成功找到,则返回指向该键值对双向迭代;反之,则返回和 end() 方法一样迭代。...如果 map 容器用 const 限定,则该方法返回是 const 类型双向迭代。 upper_bound(key) 返回一个指向当前 map 容器第一个大于 key 键值对迭代

81420

【C++】STL 容器 - vector 动态数组容器 ⑥ ( 使用迭代遍历 vector 容器步骤 | 获取指容器向首元素迭代 begin 函数 | 获取末尾迭代 | * 迭代解引用 )

> 类型容器 , 其迭代类型是 vector::iterator , 调用 vector 类 begin() 函数 , 可获取 指向容器 第一个元素迭代 ; vector...类 end() 函数 , 可获取 指向容器 最后一个元素迭代 , 判断当前迭代值 是否等于 最后一个元素迭代值 , 如果 不等于 继续迭代 , 如果等于 停止迭代 ; it !...可以用来修改容器元素 ; 第二个重载版本函数 是 常量迭代 , 不能用来修改容器元素 ; 返回迭代 可以使用 * 操作符进行解引用操作 , 获取迭代指向元素值 ; 代码示例 : #include...const noexcept; 上述两个函数都返回一个指向 容器 最后一个元素 之后一个位置迭代 , 返回迭代 不指向任何有效元素 , 但可以被用于比较和遍历容器末尾 ; 特别注意 :...修改 vector 容器后 , end() 函数返回迭代容器被修改时不会自动更新 ; 如果 vector 容器元素发生了改变 , 需要重新调用 end() 函数来获取新末尾迭代 ; 代码示例

96210

STL】iterator adapters_反向迭代实现

放在专栏【C++知识总结】,会持续更新,期待支持  本章相关文章: 【STL容器适配器 【STL】list模拟实现STL】vector模拟实现 1、反向迭代介绍 1.1、前言 在前文中我们已经讲过...1.2、反向迭代 我们都知道迭代作为STL六大组件之一,主要目的是为了可以像原生指针一样,实现容器成员遍历和访问。但是我们在此之前所讲以及实现都是从前往后正向迭代。...2、模拟实现 这里由于库实现较为复杂,涉及到一些操作实现(萃取等)起来较为难以理解,在这里我们只是简单对其实现即可。同时在我们对其实现完成后,我们可以将其用在不同支持反向遍历容器中使用。...如下所示: 2.1.3、* 运算符重载 在实现对*重载之前,我们首先要了解一下反向迭代结构,在STL,反向迭代是与正向迭代一一对应,如下所示:  但是呢,这里就出现了一个问题,因为在SGI...版本STL迭代区间有一个习惯,即:前闭后开。

16420

STL】reverse_iterator反向迭代实现

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

7510

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

为什么要等到我们讲完了容器适配器再来讲反向迭代模拟实现呢? 那这个问题我相信学完这篇文章大家就明白了。...1. list 反向迭代模拟实现 首先我们来回看一下我们之前模拟实现list代码: 这是我们之前写list正向迭代。...那reverse_iterator这个类模板实现其实是在另一个头文件stl_iterator.h里面: 那reverse_iterator 这个类呢,其实是一个适配器,是一个迭代适配器。...那我们这里迭代适配器Reverse_Iterator是不是只要对应容器迭代支持++和–操作就可以进行适配啊。...当我们还停留在思考去如何实现list迭代时候,人家考虑已经是如何做到一劳永逸,搞定所有容器反向迭代。 这就是我们和真正大佬,高手之间差距。

9310

STL源码剖析_迭代

何为迭代 2. 实现一个简单迭代 3....参考 按照《STL源码剖析》STL知识编排顺序,学习完空间配置之后,就是迭代和traits编程技法了,学习完这三个概念,才算做好了继续学习stl准备。...何为迭代 《设计模式》对iterator是这样定义:提供一种方法,使之能够依序巡防某个容器所含各个元素,而又无需暴露该容器内部表述方式。...在STL,数据容器和算法是分开,所以就需要迭代这种胶合剂来给算法提供一个访问不同容器途径,这样只需要一套算法,就能访问不同容器。...实现一个简单迭代 由于迭代给算法提供了一个访问容器途径,当前存在下面这样一个算法: template InputIterator

23220

STL开发之迭代(Iterator)

1 迭代定义 C++标准委员会对迭代定义为:指向元素范围(如数组或容器)某个元素,并能够使用一组操作符(至少使用自增(++)和解引用(*)操作符)遍历该范围元素任何对象。...指针是最常见一种迭代,指针可以指向数组元素并使用自增运算符遍进行遍历,除了数组外,也可以使用迭代对向量、列表、集合容器进行遍历。...2 迭代类型 迭代按照实现功能可以划分为5种,主要包含: 输入/输出迭代:可以顺序执行单次输入或者输出 前项迭代:具备输入迭代所有功能,如果没有定义成常量其还具有输出迭代功能。...常量反向迭代:定义方式为:容器名::const_reverse_iterator下面的例子就通过常量反向迭代遍历容器元素。...4 迭代失效 迭代失效可以分成两种情况,如序列容器迭代失效和关联容器迭代失效。 序列容器迭代失效,以vector为例。

63910

STL迭代有什么作用作用,有指针为何还要迭代

迭代 Iterator(迭代)模式又称游标(Cursor)模式,用于提供一种方法顺序访问一个聚合对象各个元素, 而又不需暴露该对象内部表示。...由于Iterator模式以上特性:与聚合对象耦合,在一定程度上限制了它广泛运用,一般仅用于底层聚合支持类,如STLlist、vector、stack等容器类及ostream_iterator等扩展...迭代和指针区别 迭代不是指针,是类模板,表现像指针。他只是模拟了指针一些功能,通过重载了指针一些操作符,->、、++、–等。...迭代封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”对象, 本质是封装了原生指针,是指针概念一种提升,提供了比指针更高级行为,相当于一种智能指针...,他可以根据不同类型数据结构来实现不同++,–等操作。

1.1K20

C++STL初识,概念、六大组件、容器算法迭代

STL 几乎所有的代码都采用了模板类或者模板函数 STL六大组件 STL大体分为六大组件,分别是:容器、算法、迭代、仿函数、适配器(配接)、空间配置 容器:各种数据结构,如vector、list、...STL容器、算法、迭代 容器:置物之所也 STL容器就是将运用最广泛一些数据结构实现出来 常用数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表 等 这些容器分为序列式容器和关联式容器两种...= 双向迭代 读写操作,并能向前和向后操作 读写,支持++、–, 随机访问迭代 读写操作,可以以跳跃方式访问任意数据,功能最强迭代 读写,支持++、–、[n]、-n、、>= 常用容器迭代种类为双向迭代...,和随机访问迭代 容器算法迭代初识 了解STL容器、算法、迭代概念之后,我们利用代码感受STL魅力 STL中最常用容器为Vector,可以理解为数组,下面我们将学习如何向这个容器插入数据、...); v.push_back(40); //每一个容器都有自己迭代迭代是用来遍历容器元素 //v.begin()返回迭代,这个迭代指向容器第一个数据 //v.end()返回迭代

37620

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

一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型 STL 容器 区别 主要是 节点 和 节点之间关系模型 不同 ; 容器内存空间是否连续 : 向量...vector 内存空间是连续 , 列表 List 内存空间是不连续 ; 容器元素节点关系 : 顺序排列 , 单向链表 , 双向链表 , 树形关系 ; 容器元素是否允许重复 : 集合 Set...元素不允许重复 ; 容器元素插入限制 : 是否允许 插入到中间 , 插入到首部 , 插入到尾部 ; 容器元素移除限制 : 是否允许 移除中间元素 , 移除首部元素 , 移除尾部元素 ; 数据结构...主要是 研究 节点 与 节点 之间关系 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 容器每个元素位置都是固定 , 元素位置取决于插入元素 时间 和 位置 , 与元素值无关 ; 向量 Vector , 双端队列 Deque , 列表 List 是序列式容器 ; 如下图所示

21130

从零开始学C++之STL(三):迭代类vector::iterator 和 vector::reverse_iterator 实现迭代类型、常用容器成员

一、迭代 迭代是泛型指针 普通指针可以指向内存一个地址 迭代可以指向容器一个位置 STL每一个容器类模版,都定义了一组对应迭代类。... iterator_category 输入迭代 可以用来从序列读取数据 输出迭代 允许向序列写入数据 前向迭代 既是输入迭代又是输出迭代,并且可以对序列进行单向遍历 双向迭代...与前向迭代相似,但是在两个方向上都可以对数据遍历 随机访问迭代 也是双向迭代,但能够在序列任意两个位置之间进行跳转 下图是不同类型迭代能够实现操作: ?...因此,在处理算法时,最好将关联容器迭代视为支持自减运算输入迭代,而不是完整双向迭代。...三、常用容器成员 下面列举成员,有一些是所有容器共有的,有些是特有的,注意区别: ? ? ? ? ? ?

2K00

JDK容器学习之HashMap (三) : 迭代实现

HashMap 迭代实现方式 java容器类,实现Collection接口都会实现迭代方式,Map则有点特殊,它不实现Collection接口,它迭代使用方式则主要借助Collection来实现...,迭代模式主要依赖 iterator() 方法实现 返回继承 hashIterator EntryIterator 对象,其中核心next()方法就是调用 hashIterator.nextNode...问题一 map.entrySet 返回Entry集合元素个数和Mapsize是否相同 因为entrySet集合实际上持有的依然是table数组数据对象,其迭代就是扫描table数组,所以size...,都是定义一个内部Set对象,迭代实现对table数组扫描,因为原理大同小异,不再进行赘述, 看下面两个迭代基本就知道了 final class KeyIterator extends HashIterator...有意思遍历思路 上面的遍历实现,非常有意思,也有不小借鉴意义,比如希望给一个对象内部元素提供一些特殊遍历方式,可以参考一下这种做法 实现思路: 内部类实现迭代 next方法实现成员变量迭代逻辑

69050

【C++】STL 容器 - set 集合容器 ② ( set 集合容器常用 api 简介 | 使用迭代进行正向迭代与反向迭代 | 集合容器插入元素 | 插入单个元素 | 插入多个元素 )

一、set 集合容器遍历 1、使用迭代进行正向迭代与反向迭代 std::set 集合容器 提供了 begin、end、rbegin 和 rend 这几个成员函数,用于 获取 迭代访问链表元素 ...end() const; 获取指向尾元素反向迭代 : 该函数返回一个反向迭代 , 指向集合容器最后一个元素 ; 如果集合容器为空 , 则此操作未定义 ; 反向迭代从集合尾部向头部移动 ;...获取指向首元素之前反向迭代 : 返回一个反向迭代 , 指向集合 超出头部 ”位置 , 即第一个元素前一个位置 ; 该迭代 它用于与 rbegin 一起实现完整逆向迭代 ; reverse_iterator...二、set 集合容器插入元素 1、插入单个元素 - insert 函数 在 C++ 标准模板库 ( STL , Standared Template Library ) , set 容器是一个有序集合...- insert 函数 调用 set 容器 insert 函数 , 传入 2 个迭代对象 , 可以将另外一个容器指定范围元素插入到 set 集合容器 , 插入多个元素会在 set 容器自动排序

35410

C++ 认识容器迭代

文章目录 1.错误 map 删除操作 2.STL容器迭代底层实现机制 参考文献 1.错误 map 删除操作 假设有个 map 容器,用于存储大学班级各个家乡省份对应学生数,key为省份中文全拼...解决方法有二,还是以上面的 map 容器为例,示例删除操作正确实现: **方法一:**当删除特定值元素时,删除元素前保存当前被删除元素下一个元素迭代。...2.STL容器迭代底层实现机制 提到STL,必须要马上想到其主要6个组成部件,分别是:容器迭代、算法、仿函数、适配器和空间分配器,迭代是连接容器和算法一种重要桥梁。...STL容器迭代本质是类对象,其作用类似于数据库游标(cursor),除此之外迭代也是一种设计模式。我们可以对它进行递增(或选择下一个)来访问容器元素,而无需知道它内部是如何实现。...其行为很像指针,都可以用来访问指定元素。但是二者是完全不同东西,指针代表元素内存地址,即对象在内存存储位置,而迭代则代表元素在容器相对位置。

58220

【C++】STL 容器 - set 集合容器 ③ ( set 集合容器常用 api 简介 | 删除元素 | 删除指定值元素 | 删除指定迭代位置元素 | 删除指定迭代范围元素 )

文章目录 一、删除元素 1、删除指定值元素 - erase 函数 2、删除指定迭代位置元素 - erase 函数 3、删除指定迭代范围元素 - erase 函数 4、删除集合所有元素 -...clear 函数 一、删除元素 1、删除指定值元素 - erase 函数 在 C++ 语言 STL 标准模板库 , set 集合容器 是一个有序集合 , 存储元素值都是唯一 , 不重复...迭代 对象 , 作为参数 , 删除该迭代指向元素 ; 函数原型如下 : iterator erase (iterator position); 参数解析 : position 参数是一个指向要删除元素迭代...; 返回值解析 : 该函数返回值是一个迭代 , 指向被删除元素之后下一个元素 ; 使用示例 : 在下面的示例 , 删除了集合容器第二个元素 ; // set 集合容器 // 初始化列表顺序会自动排序...- erase 函数 调用 set#erase 函数 , 可以传入两个迭代参数 , 这两个迭代划定了本集合容器一个范围 , 执行该函数可删除该范围所有元素 ; 函数原型如下 : iterator

26310

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

---- 前言 适配器模式是 STL 重要组成部分,在上一篇文章我们学习了 容器适配器 相关知识,即 stack 与 queue,除了 容器适配器 外,还有 迭代适配器,借助 迭代适配器,可以轻松将各种容器普通迭代转变为反向迭代...,这正是适配器核心思想 ---- ️正文 反向迭代适用于所有的容器,因此它是作为一个单独 .h 文件出现,别的容器如果想使用,直接包含就行了 1、反向迭代设计 反向迭代 reverse_iterator...可以用来反向遍历容器,在某些场景下很实用 反向迭代需要有:正向迭代对象、构造函数 template struct __reverse_iterator {...注意:源码反向迭代设计较为复杂,涉及 萃取 等操作,为了方便学习,这里实现是简易版本 1.1、反向思想 何谓反向?...vector(反向迭代版) list(反向迭代版) ---- 总结 以上就是本篇关于 C++ STL 学习之【反向迭代全部内容了,在本篇文章,我们主要学习了反向迭代思想及实现,最后分别用了

11920
领券