STL学习笔记— —iterator迭代器

头文件

所有的容器都定义了自己的迭代器类型,所以一般情况下,不需要再自己添加迭代器头文件。但是如果要使用一些特殊的迭代器,如反向迭代器,或者一些迭代器辅助函数,那么就需要添加头文件<iterator>。

迭代器类型

类型 能力 提供者
输入迭代器 一次向前读取 istream
输出迭代器 向前写入 ostream,inserter
前向迭代器 向前读取和写入 forward list,unordered containers
双向迭代器 向前和向后的读取和写入 list,set,multiset,map,multimap
随机存取迭代器 随机读取和写入 array,vector,deque,string,C-style array

迭代器运算中,++iter比iter++更快,所以最好选用++iter

输入迭代器

*iter //读取实际元素

iter ->member //读取实际元素的成员

++iter //向前步进(返回新位置)

iter++ //向前步进(返回旧位置)

iter1 == iter2 //判断两个迭代器是否相等

iter1 != iter2 //判断两个迭代器是否不等

TYPE(iter) //copy构造函数

输出迭代器

*iter = value  //将数值写到迭代器所指位置

++iter //向前步进(返回新位置)

iter++ //向前步进(返回旧位置)

TYPE(iter) //copy构造函数

前向迭代器

*iter //存取实际元素

iter ->member //存取实际元素的成员

++iter //向前步进(返回新位置)

iter++ //向前步进(返回旧位置)

iter1 == iter2 //判断两个迭代器是否相等

iter1 != iter2 //判断两个迭代器是否不等

TYPE() //default构造函数

TYPE(iter) //copy构造函数

iter = iter2 //赋值

双向迭代器

*iter //存取实际元素

iter ->member //存取实际元素的成员

++iter //向前步进(返回新位置)

iter++ //向前步进(返回旧位置)

--iter //向后步进(返回新位置)

iter-- //向后步进(返回旧位置)

iter1 == iter2 //判断两个迭代器是否相等

iter1 != iter2 //判断两个迭代器是否不等

TYPE() //default构造函数

TYPE(iter) //copy构造函数

iter = iter2 //赋值

随机存取迭代器

iter[n] //存取索引位置为n的元素
iter+=n //向前跳n个元素(若n为负,则向后跳)
iter-=n //向后跳n个元素(若n为负,则向前跳)
iter+n //传回iter之后的第n个元素
n+iter //传回iter之后的第n个元素
iter-n //传回iter之前的第n个元素
iter1-iter2 //传回iter1和iter2之间的距离
iter1<iter2 //判断iter1是否在iter2之前
iter1>iter2 //判断iter1是否在iter2之后
iter1<=iter2 //判断iter1是否不在iter2之后
iter1>=iter2 //判断iter1是否不在iter2之前

迭代器辅助函数

advance() //使迭代器前进给定的距离 

distance() //返回两个迭代器之间的距离 

next() //使迭代器前进一步 

prev() //使迭代器后退一步 

begin() //返回指向容器首元素的迭代器

end() //返回指向容器尾元素的迭代器
时间: 2024-08-27 10:38:08

STL学习笔记— —iterator迭代器的相关文章

STL学习笔记(迭代器相关辅助函数)

advance()可令迭代器前进 #include <iterator> void advance(InputIterator& pos,Dist n); 面对Random Access(随机存取)迭代器,该函数只是简单的调用pos+=n.而对于其他任何类型的迭代器则调用++pos(--pos)n次. distance()可以处理迭代器之间的距离 #include <iterator> Dist distance(InputIterator pos1,InputIterat

STL学习笔记(迭代器配接器)

Reverse(逆向)迭代器 Reverse迭代器是一种配接器. 重新定义递增运算和递减运算.使其行为正好倒置. 如果你使用这类迭代器,算法将以逆向次序处理元素.所有标准容器都允许使用Reverse迭代器来遍历元素.下面是个例子: 1 #include <iostream> 2 #include <list> 3 #include <algorithm> 4 using namespace std; 5 6 void print(int elem) 7 { 8 cout

STL学习笔记(迭代器类型)

迭代器类型 迭代器是一种“能够遍历某个序列内的所有元素”的对象.它可以透过与一般指针一致的接口来完成自己的工作. 不同的迭代器具有不同的”能力“(行进和存取能力) Input迭代器 Input迭代器只能一次一个向前读取元素,按此顺序一个个传回元素值. 几乎所有迭代器都具备Input迭代器的能力,而且通常更强.纯粹Input迭代器的一个典型例子就是“从标准输入装置读取数据”的迭代器. 下表列出了Input迭代器的各种操作行为 Output迭代器 Output迭代器和Input迭代器相反,其作用是将

C++学习笔记之迭代器

模板是的算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型.理解迭代器是理解STL的关键. 迭代器应该具备的特征: (1)应该能够对迭代器进行解除引用的操作,以便能够访问它引用的值.即如果P是一个迭代器,则应该对*P进行定义 (2)应该能够将一个迭代器赋给另一个迭代器.如果P和Q都是迭代器,则应对P=Q定义. (3)应该能够对迭代器进行比较,看它们是否相等.即如果P和Q都是迭代器,则应对P==Q和P!=Q进行定义. (4)应该能够使用迭代器遍历容器中的所有元素,这可以通过迭代器定义的+

【转】Java学习之Iterator(迭代器)的一般用法 (转)

[转]Java学习之Iterator(迭代器)的一般用法 (转) 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator.第一次调用Iterator的next()方法时,它返回序列的第一个元素.注意:iterator()方法是java.l

Java学习之Iterator(迭代器)的一般用法(转)

迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator.第一次调用Iterator的next()方法时,它返回序列的第一个元素.注意:iterator()方法是java.lang.Iterable接口,被Collection继承. (2)

STL学习笔记--3、迭代器iterator与traits编程

iterator模式:提供一种方法,依次巡访某个聚合物(容器)所含的各个元素,而无需暴露该聚合物的内部表达式. 1.迭代器设计思维 STL在于将数据容器和算法分开,彼此独立,最后再以一帖粘合剂将它们撮合在一起.只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作. 算法find():接受两个迭代器和一个搜寻目标. //摘自SGI<stl_algo.h> template <class InputIterator, class T> InputIterator find(Inp

STL学习笔记--&gt;初识STL

“这里要用char类型”; “这里要用int类型”; “其实实现这个方法只需要把另一个方法的返回值的类型和传入参数的类型改成float类型就实现了”; “其实这个算法只需要把以前写的那个稍微改动一下就行了”; ……………… 学过面向对象语言的都知道GP这个概念,就是泛型程序设计,说的再明白点就是编写不依赖于具体数据类型的程序,C++作为一门面向对象语言,当然也有泛型这个概念,这就不得不提STL(Standard Template Library,标准模板库),是被融入C++标准程序库里面的一个高

STL学习笔记(第五章 STL组件)

STL组件 若干精心勾画的组件共同合作,构筑起STL的基础.这些组件最关键的是容器.迭代器和算法. 下图演示了STL组件之间的合作 容器(Containers) 容器类别(简称容器)用来管理一组元素.为了适应不同需求,STL提供了不同类型的容器. 总的来说,容器可分为两类: 1.序列式容器Sequence containers,此乃可序群集,其中每个元素均有固定位置(取决于插入时机和地点,和元素值无关). STL提供三个定义好的序列式容器:vector.deque和list. 2.关联式容器As