C++11标准模板库STL_第1页
C++11标准模板库STL_第2页
C++11标准模板库STL_第3页
C++11标准模板库STL_第4页
C++11标准模板库STL_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1标准模板库标准模板库主要内容:主要内容:1.1.STLSTL2.2.容器类容器类3.3.迭代器迭代器4.4.算法库算法库泛型程序泛型程序设计设计C+ 语言的核心优势之一就是便于软件的重用语言的核心优势之一就是便于软件的重用 C+中有两个方面体现重用中有两个方面体现重用: 1.面向对象的思想面向对象的思想:继承和多态继承和多态,标准类库标准类库 2.泛型程序设计泛型程序设计(generic programming) 的思想的思想: 模板机制模板机制,以及标准模板库以及标准模板库 STL 2泛型程序泛型程序设计设计简单地说就是使用模板的程序设计法。简单地说就是使用模板的程序设计法。 将一些常用的

2、数据结构将一些常用的数据结构(比如链表比如链表,数组数组,二叉树二叉树) 和和算法算法(比如排序比如排序,查找查找)写成模板写成模板,以后则不论数据结以后则不论数据结构里放的是什么对象构里放的是什么对象,算法针对什么样的对象算法针对什么样的对象,则都则都不必重新实现数据结构不必重新实现数据结构,重新编写算法。重新编写算法。 标准模板库标准模板库 (Standard Template Library) 就是就是一些常用数据结构和算法的模板的集合。一些常用数据结构和算法的模板的集合。 有了有了STL,不必再写大多的标准数据结构和算法不必再写大多的标准数据结构和算法, 并并且可获得非常高的性能。且可

3、获得非常高的性能。 3STL基本概念基本概念容器容器:可容纳各种数据类型的通用数据结构可容纳各种数据类型的通用数据结构,是类模板是类模板 迭代器迭代器:可用于依次存取容器中元素可用于依次存取容器中元素,类似于指针类似于指针 算法算法:用来操作容器中的元素的函数模板用来操作容器中的元素的函数模板 sort()来对一个来对一个vector中的数据进行排序中的数据进行排序 find()来搜索一个来搜索一个list中的对象中的对象 算法本身与他们操作的数据的类型无关算法本身与他们操作的数据的类型无关,因此他们可因此他们可以在从简单数组到以在从简单数组到 高度复杂容器的任何数据结构上高度复杂容器的任何数

4、据结构上使用。使用。 4510.1 Standard Template Library1.STL的基本思想的基本思想可以把软件部件想象成一个三维空间可以把软件部件想象成一个三维空间第一维表示数据类型第一维表示数据类型(int, double, char, )第二维表示容器第二维表示容器(array, linked-list, )第三维表示算法第三维表示算法(sort, merge, search, )根据图示,需要设计根据图示,需要设计i*j*k个不同的代码版本,比如整数个不同的代码版本,比如整数数组的排序算法、数组的排序算法、double数组的排序算法,数组的排序算法,double link

5、ed-list的搜索算法的搜索算法。 int,double,class, array, linked-list sort,merge, search, kij6通过使用数据类型作为参数的模板函数,第一维通过使用数据类型作为参数的模板函数,第一维(i轴轴)就就可取消,而仅需要设计可取消,而仅需要设计j*k个不同的代码。个不同的代码。 下一步是让算法可以工作在不同的容器上,这就意味着下一步是让算法可以工作在不同的容器上,这就意味着排序算法既可以用在排序算法既可以用在array上,也可用在上,也可用在linked-list上。上。即只需要设计即只需要设计j+k个不同的代码版本。个不同的代码版本。 S

6、TL具体化了上述思想,期望通过减少开发时间以具体化了上述思想,期望通过减少开发时间以简化软件开发,简化调试、维护并增加代码的可移简化软件开发,简化调试、维护并增加代码的可移植性(跨平台,硬件和系统)。植性(跨平台,硬件和系统)。 72.什么是什么是STL标准模板库(标准模板库(Standard Template Library, STL),是,是ANSI/ISO C+最新的标准函数库中的一个子集,是最新的标准函数库中的一个子集,是一个一个泛型化(泛型化(generic)generic)的数据结构和算法库的数据结构和算法库。从逻辑层次来看,在从逻辑层次来看,在STLSTL中体现了泛型化程序设计(

7、中体现了泛型化程序设计(GPGP)的思想,引入了诸多新的名词,比如像容器的思想,引入了诸多新的名词,比如像容器(container )(container )算法算法(algorithm)(algorithm),迭代器,迭代器(iterator)(iterator)等。等。与与OOPOOP中的多中的多态(态(polymorphismpolymorphism)一样,泛型也是一种软件的复用技术。)一样,泛型也是一种软件的复用技术。从实现层次看,整个从实现层次看,整个STL是以一种类型参数化(是以一种类型参数化(type parameterized)的方式实现的,)的方式实现的,这种方式基于这种方式

8、基于C+语言语言的模板机制。的模板机制。 8图图1 STL1 STL和和C+C+标准函数库标准函数库 9STL中的软件包主要包括:中的软件包主要包括:容器容器(Container):一种存储有限集合数据元素的数据:一种存储有限集合数据元素的数据结构,例如,向量、列表、集合、映射等。结构,例如,向量、列表、集合、映射等。迭代器迭代器(Iterator):或称游标,是一种面向对象的泛型:或称游标,是一种面向对象的泛型指针,实现对容器中的任意类型对象的遍历,从而对指针,实现对容器中的任意类型对象的遍历,从而对各对象进行处理。各对象进行处理。算法库算法库(Algorithms):包括了各种基本算法,如

9、:包括了各种基本算法,如sort,copy,search,revese等,对容器中的对象进行各种等,对容器中的对象进行各种操作。操作。函数对象函数对象(Function Object):定义了函数调用操作符:定义了函数调用操作符(operator()的类。的类。适应器适应器(Adaptor):封装一个部件以提供另外的接口:封装一个部件以提供另外的接口(例如用例如用list实现实现stack)。10迭代器迭代器int array100; 该数组就是容器该数组就是容器,而而 int * 类型的指针变量就可以作类型的指针变量就可以作为迭代器为迭代器,sort 算法可以作用于该容器上算法可以作用于该容

10、器上,对其进行对其进行排序排序: sort(array,array+70); /将前将前70个元素排序个元素排序 111.STL的组织的组织在在C+标准中,标准中,STL被组织为下面的被组织为下面的13个个不带不带.h后缀的后缀的头文件:头文件:、和和。1210.2 容器类容器类1.容器的基本概念容器的基本概念容器容器指一种存储有限集合数据元素的数据结构。指一种存储有限集合数据元素的数据结构。容器类容器类是一批相关的标准类模板的总称,它包含最基本的是一批相关的标准类模板的总称,它包含最基本的7个个标准类模板标准类模板,分为两大类:,分为两大类:顺序容器类顺序容器类(Sequence Conta

11、iner )在其中存储的对象是有序的,用户可以在指定位置在其中存储的对象是有序的,用户可以在指定位置插入或存取对象。插入或存取对象。vector(向量向量)list(列表列表)deque(双端队列双端队列)13关联容器类关联容器类(Associative Container )在其中存储的对象是无序的,对象在容器中的装入位置由在其中存储的对象是无序的,对象在容器中的装入位置由非线性方法确定。非线性方法确定。map(映像映像)set(集合集合)multiset(多重集合多重集合)multimap(多重映像多重映像)关联容器提供了基于关联容器提供了基于KEY的数据的快速检索能力。元素被的数据的快速

12、检索能力。元素被排好序,检索数据时可以二分搜索。排好序,检索数据时可以二分搜索。当一个当一个KEY对应一个对应一个Value时,可以使用集合时,可以使用集合(Set)和映射和映射(Map);若对应同一;若对应同一KEY有多个元素被存储时,可以使有多个元素被存储时,可以使用多集合用多集合(MultiSet)和多映射和多映射(MultiMap)。141.容器类的特点容器类的特点1)任何一个容器类都可以容纳任何类型的对象或任何基任何一个容器类都可以容纳任何类型的对象或任何基本数据类型的数值。本数据类型的数值。STL自动把基本数据类型的数据包装转换为类型的自动把基本数据类型的数据包装转换为类型的对象。

13、对象。对用户自定义类类型的对象,要求必须提供正确的对用户自定义类类型的对象,要求必须提供正确的构造函数、拷贝构造函数和析构函数。构造函数、拷贝构造函数和析构函数。2)所有容器类都提供了一些与其特性相关的成员函数。所有容器类都提供了一些与其特性相关的成员函数。3)每个容器类都提供了一个相应的迭代器。每个容器类都提供了一个相应的迭代器。4)每个容器类都提供有一个参数为空的构造函数,方便每个容器类都提供有一个参数为空的构造函数,方便用户定义容器类对象。用户定义容器类对象。15对象被插入容器中时对象被插入容器中时,被插入的是对象的一个复制被插入的是对象的一个复制 品。许多算法品。许多算法,比如排序比如

14、排序,查找查找,要求对容器中的元要求对容器中的元 素素进行比较进行比较,有的容器本身就是排序的有的容器本身就是排序的,所以所以,放入放入 容器容器的对象所属的类的对象所属的类,往往还应该重载往往还应该重载 = 和和 运算运算 符。符。 16顺序容器顺序容器1.7种容器的逻辑结构种容器的逻辑结构vector 和和 deque用动态数组实现,允许顺序访问和随机访问。用动态数组实现,允许顺序访问和随机访问。list用链表实现,允许顺序访问,不支持随机存取。用链表实现,允许顺序访问,不支持随机存取。AddRemoveheadtail17Vectorvector 头文件头文件 动态数组。元素在内存连续存

15、放。随机存取任何元动态数组。元素在内存连续存放。随机存取任何元素都能在常数时素都能在常数时 间完成。在尾端增删元素具有较佳间完成。在尾端增删元素具有较佳的性能的性能(大部分情况下是常数时间大部分情况下是常数时间)。 18Vector可变长的动态数组可变长的动态数组 必须包含头文件必须包含头文件 #include 支持随机访问迭代器支持随机访问迭代器根据下标随机访问某个元素时间为常数根据下标随机访问某个元素时间为常数 在尾部添加速度很快在尾部添加速度很快在中间插入慢在中间插入慢 所有所有STL算法算法 都能对都能对vector操作操作 19vector的成员函数的成员函数 构造函数初始化构造函数

16、初始化 20vector的成员函数的成员函数 其他常用函数其他常用函数21Vector实例实例22二维动态数组二维动态数组vector vector v(3);/v有3个元素, /每个元素都是vector 容器23二维动态数组二维动态数组24dequedeque 头文件头文件 双向队列。元素在内存连续存放。随机存取任何元双向队列。元素在内存连续存放。随机存取任何元素都能在常数时间完成素都能在常数时间完成(但次于但次于vector)。在两端增。在两端增删元素具有较佳的性能删元素具有较佳的性能(大部分情况下大部分情况下 是常数时间是常数时间)。 25Deque容器容器双向队列必须包含头文件 #in

17、clude 所有适用于vector的操作 都适用于dequedeque还有 push_front (将元素插入到容器的头部) 和 pop_front (删除头部的元素) 操作26Listlist 头文件头文件 双向链表。元素在内存不连续存放。在任何位置增双向链表。元素在内存不连续存放。在任何位置增删元素都能在常删元素都能在常 数时间完成。不支持随机存取。数时间完成。不支持随机存取。 27List容器容器28List容器容器还支持8个成员函数:291.列表容器类列表容器类list头文件为头文件为list。标准类模板标准类模板list的定义:的定义:template/T代表容器中的数据类型,代表容

18、器中的数据类型,A与内存分配有关,系统给出了默认值与内存分配有关,系统给出了默认值class listpublic: void splice(iterator it, list& x); /粘接粘接 void splice(iterator it, list& x, iterator first); void sort(); void merge(list& x); void push_front(const T& x); void pop_front(); ;30列表容器是用链表方法实现的。列表容器是用链表方法实现的。链表的优点:若只在链表头部或链表尾部插入或

19、删除链表的优点:若只在链表头部或链表尾部插入或删除数据元素时,效率很高。数据元素时,效率很高。链表的缺点:随机访问效率很低。链表的缺点:随机访问效率很低。和使用向量容器相比,使用列表容器的优点:顺序访问和使用向量容器相比,使用列表容器的优点:顺序访问时不仅效率高,并且不会因频繁申请数组空间并复制原时不仅效率高,并且不会因频繁申请数组空间并复制原数组内容而降低效率。数组内容而降低效率。使用列表容器的缺点:若要频繁地进行随机访问,其效使用列表容器的缺点:若要频繁地进行随机访问,其效率不高。率不高。list没有重载下标运算符没有重载下标运算符“”,从而不支持随机存取,从而不支持随机存取。31关联容器

20、关联容器元素是排序的元素是排序的插入任何元素插入任何元素,都按相应的排序规则来确定其位置都按相应的排序规则来确定其位置在查找时具有非常好的性能在查找时具有非常好的性能 通常以平衡二叉树方式实现通常以平衡二叉树方式实现,插入和检索的时间都是插入和检索的时间都是 O(log(N) 32关联容器关联容器set和和multisetset/multiset 头文件头文件 set 即集合。即集合。set中不允许相同元素中不允许相同元素,multiset中允中允许存在相同的元素。许存在相同的元素。 用动态数组实现,采用排序的方法保存集合中的数据用动态数组实现,采用排序的方法保存集合中的数据元素,查找效率很高

21、。元素,查找效率很高。x331.集合容器类集合容器类set头文件为头文件为set。set采用动态数组结构实现,采用动态数组结构实现,STL采用排序的方法保存采用排序的方法保存集合中的数据元素,从而提高了查找效率。集合中的数据元素,从而提高了查找效率。集合中的数据元素无序且不重复。集合中的数据元素无序且不重复。set没有重载下标运算符没有重载下标运算符“”。multiset容器允许存在相同值的对象,头文件为容器允许存在相同值的对象,头文件为set。34关联容器关联容器map和和multimapmap/multimap 头文件头文件 map与与set的不同在于的不同在于map中存放的元素有且仅有中

22、存放的元素有且仅有两个成员变量两个成员变量,一个名一个名 为为first,另一个名为另一个名为second, map根据根据first值对元素进行从小到大排序值对元素进行从小到大排序, 并可快并可快速地根据速地根据first来检索元素。来检索元素。 map同同multimap的不同在于是否允许相同的不同在于是否允许相同first值值的元素。的元素。 ABCD1234351.映像容器类映像容器类map头文件为头文件为map。映像容器中的数据元素必须成对出现,也称做字典数映像容器中的数据元素必须成对出现,也称做字典数组(或关联数组)。组(或关联数组)。STL中定义了成对数据类型的模板中定义了成对数

23、据类型的模板类型的结构体类型的结构体pair:templatestruct pair typedef T first_type; typedef U second_type; T first; U second; pair(); pair(const T& x, const U& y);36map提供对提供对“(key, value)”数对进行有效存取与管理数对进行有效存取与管理的机制。其中的机制。其中key是作为键出现的,是作为键出现的,value作为对应于该作为对应于该键的一个具体数据值。要求键键的一个具体数据值。要求键key在容器中是唯一的,在容器中是唯一的,而其对应的而

24、其对应的value数据值则可以重复。数据值则可以重复。重载了下标运算符重载了下标运算符“”,以进行基于,以进行基于key值的存取与插值的存取与插入入。map采用动态数组结构实现,采用动态数组结构实现, STL采用排序的方法保存采用排序的方法保存集合中的数据元素,从而提高了查找效率。集合中的数据元素,从而提高了查找效率。multimap容器可存在相同关键字的对象,头文件为容器可存在相同关键字的对象,头文件为map。multimap中没有重载下标运算符中没有重载下标运算符“”。map contact;contact张三contactEllen37

25、容器适配器容器适配器queue 头文件头文件 队列。插入只可以在尾队列。插入只可以在尾部进行部进行, 删除、检索和删除、检索和修改只允许从头修改只允许从头 部进行。部进行。先进先出。先进先出。 38容器适配器容器适配器priority_queue 头文头文件件 优先级队列。最高优先优先级队列。最高优先级元素总是第一个出列级元素总是第一个出列 39顺序容器和关联容器中都有的成员函数顺序容器和关联容器中都有的成员函数 begin 返回指向容器中第一个元素的迭代器返回指向容器中第一个元素的迭代器end 返回指向容器中最后一个元素后面的位置的返回指向容器中最后一个元素后面的位置的迭代器迭代器 rbeg

26、in 返回指向容器中最后一个元素的迭代器返回指向容器中最后一个元素的迭代器rend 返回指向容器中第一个元素前面的位置的迭返回指向容器中第一个元素前面的位置的迭代器代器 erase 从容器中删除一个或几个元素从容器中删除一个或几个元素clear 从容器中删除所有元素从容器中删除所有元素 40顺序容器的常用成员函数顺序容器的常用成员函数 front :返回容器中第一个元素的引用返回容器中第一个元素的引用 back : 返回容器中最后一个元素的引用返回容器中最后一个元素的引用 push_back : 在容器末尾增加新元素在容器末尾增加新元素 pop_back : 删除容器末尾的元素删除容器末尾的元

27、素 erase :删除迭代器指向的元素删除迭代器指向的元素(可能会使该迭代可能会使该迭代器失效器失效),或或 删除一个区间删除一个区间,返回被删除元素后面的返回被删除元素后面的那个元素的迭代器那个元素的迭代器 41【例11.8】我国部分省份与面积映射关联容器类演示 typedef mapstring,double,less mappro; / 之间必须有空格之间必须有空格int main() int i; string provinces=Jiangsu,Zhejiang,Anhui,Henan, Xinjiang; double areas=10.26,10.18,13.96,16.7,16

28、6; mappro mapprovinces; mappro:iterator iter; for(i=0;i5;i+) mapprovincesprovincesi=areasi; mapprovinces.insert(mappro:value_type(Guangdong,17.98); mapprovinces.insert(mappro:value_type(Shanxi,20.58); mapprovinces.insert(mappro:value_type(Heilongjiang,46); mapprovinces.insert(mappro:value_type(Taiwa

29、n,3.6); mapprovinces.insert(mappro:value_type(Yunnan,39.4); for(iter=mapprovinces.begin();iter!= mapprovinces.end();iter+) coutfirsttsecondn; return 0;4210.3 迭代器(迭代器(iterator)1.迭代器的概念迭代器的概念迭代器也称为迭代子或游标,是一种迭代器也称为迭代子或游标,是一种泛型指针泛型指针。它允许它允许程序员以相同的方式处理不同的数据结构程序员以相同的方式处理不同的数据结构(容器容器)。软件设计有一个基本原则,所有的问题都可以通

30、过引进软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在一个间接层来简化,这种简化在STL中就是用迭代器来中就是用迭代器来完成的。完成的。迭代器在迭代器在STL中用来将算法和容器联系起来,几乎中用来将算法和容器联系起来,几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作提供的所有算法都是通过迭代器存取元素序列进行工作的。的。每一个容器都定义了其本身所专有的迭代器,用以存取每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。容器中的元素。迭代器部分主要由头文件迭代器部分主要由头文件,和和组成。组成。4310.3 迭代器(迭代器(iterator)用于指

31、向顺序容器和关联容器中的元素用于指向顺序容器和关联容器中的元素 迭代器用法和指针类似迭代器用法和指针类似有有const 和非和非 const两种两种通过迭代器可以读取它指向的元素通过迭代器可以读取它指向的元素 通过非通过非const迭代器还能修改其指向的元素迭代器还能修改其指向的元素 44迭代器的媒介作用迭代器的媒介作用IteratorIteratorIterator对象对象对象对象对象对象 容容 器器 算算 法法45 迭代器(迭代器(iterator)定义一个容器类的迭代器的方法可以是定义一个容器类的迭代器的方法可以是: 容器类名容器类名:iterator 变量名变量名; 或或: 容器类名容

32、器类名:const_iterator 变量名变量名; 访问一个迭代器指向的元素访问一个迭代器指向的元素: * 迭代器变量名迭代器变量名 46 迭代器(迭代器(iterator)迭代器上可以执行迭代器上可以执行 + 操作操作, 以使其指向容器中的以使其指向容器中的下一个元素。下一个元素。 如果迭代器到达了容器中的最后一个元素的后面如果迭代器到达了容器中的最后一个元素的后面,此此时再使用它时再使用它,就会出错就会出错,类似于使用类似于使用NULL或未初始化或未初始化的指针一样。的指针一样。 47 迭代器(迭代器(iterator)48 迭代器(迭代器(iterator)491.迭代器的种类迭代器的

33、种类箭头箭头表示左边的迭代器一定满足右边迭代器需要的条表示左边的迭代器一定满足右边迭代器需要的条件。比如,某个算法需要一个双向迭代器,则可以把件。比如,某个算法需要一个双向迭代器,则可以把一个任意存取迭代器一个任意存取迭代器(Random Access Iterator)(Random Access Iterator)作为作为参数;但反之不行。参数;但反之不行。随机访问随机访问迭代器迭代器双向双向迭代器迭代器向前向前迭代器迭代器输出输出迭代器迭代器输入输入迭代器迭代器50Input iterators:允许向前递增迭代器而使其指向下一:允许向前递增迭代器而使其指向下一个元素个元素(使用使用 +

34、 操作符操作符),并可以读取迭代器指向,并可以读取迭代器指向(使用使用 * 操作符操作符)的数据。的数据。Output iterators:允许向前递增迭代器而使其指向下:允许向前递增迭代器而使其指向下一个元素,并可以给迭代器指向的对象赋新值。一个元素,并可以给迭代器指向的对象赋新值。Forward iterators:支持读、写操作;提供一个遍历支持读、写操作;提供一个遍历方向。方向。Bidirectional iterators:提供读写操作,并能向前和:提供读写操作,并能向前和向后操作。向后操作。(list, set, map)Random access iterators:提供读写操作

35、,并能在数:提供读写操作,并能在数据中随机移动。据中随机移动。(vector)如:如:string:iterator it = s.begin();char c = *(it+5); / 跳过序列中的五个元素跳过序列中的五个元素511.1.迭代器的操作迭代器的操作 每种迭代器均可进行包括箭头右边迭代器可进行的操作。每种迭代器均可进行包括箭头右边迭代器可进行的操作。1)1)所有迭代器所有迭代器 p+:后置自增迭代器后置自增迭代器+p:前置自增迭代器前置自增迭代器2)2)输入迭代器输入迭代器 *p:复引用迭代器,作为右值复引用迭代器,作为右值p=p1:将一个迭代器赋给另一个迭代器将一个迭代器赋给另

36、一个迭代器p=p1:比较迭代器的相等性比较迭代器的相等性p!=p1:比较迭代器的不等性比较迭代器的不等性3)3)输出迭代器输出迭代器 *p:复引用迭代器,作为左值复引用迭代器,作为左值p=p1:将一个迭代器赋给另一个迭代器将一个迭代器赋给另一个迭代器524)4)正向迭代器正向迭代器提供输入输出迭代器的所有功能提供输入输出迭代器的所有功能 5)5)双向迭代器双向迭代器 -p:前置自减迭代器前置自减迭代器p-:后置自减迭代器后置自减迭代器6)6)随机迭代器随机迭代器 p+=i:将迭代器递增将迭代器递增i位位p-=i:将迭代器递减将迭代器递减i位位p+i:在在p位加位加i位后的迭代器位后的迭代器p-

37、i: 在在p位减位减i位后的迭代器位后的迭代器pi: 返回返回p位元素偏离位元素偏离i位的元素引用位的元素引用pp1:如果迭代器如果迭代器p的位置在的位置在p1前,返回前,返回true,否,否则返回则返回false53pp1:如果迭代器如果迭代器p的位置在的位置在p1后,返回后,返回true,否则返回否则返回falsep=p1Lp的位置在的位置在p1的后面或同一位置时返回的后面或同一位置时返回true,否则返回,否则返回false54双向迭代器双向迭代器若若p和和p1都是双向迭代器都是双向迭代器,则可对则可对p、p1可进行以下可进行以下操作操作: +p, p+使使p指向容器中下一个元素指向容器

38、中下一个元素-p, p- 使使p指向容器中上一个元素指向容器中上一个元素* P 取取p指向的元素指向的元素p = p1 赋值赋值 p = p1 , p!= p1 判断是否相等、不等判断是否相等、不等 55随机访问迭代器随机访问迭代器若若p和和p1都是随机访问迭代器都是随机访问迭代器,则可对则可对p、p1可进行可进行以下操作以下操作: 双向迭代器的所有操作双向迭代器的所有操作p += i 将将p向后移动向后移动i个元素个元素p -= i 将将p向向前移动向向前移动i个元素个元素p + i 值为值为: 指向指向 p 后面的第后面的第i个元素的迭代器个元素的迭代器 p - i 值为值为: 指向指向

39、p 前面的第前面的第i个元素的迭代器个元素的迭代器 pi 值为值为: p后面的第后面的第i个元素的引用个元素的引用p p1, p p1, p= p1 56迭代器使用举例迭代器使用举例 用用list容器保存数据元素容器保存数据元素55,44,88,99,然后,然后依次输出依次输出list容器中的数据元素。容器中的数据元素。list myList;list:iterator l_it;myList.push_back(55);myList.push_back(44);myList.push_back(88);myList.push_back(99);lor(l_it.myList.begin();l_it.myList.end(); l_it+) cout*l_it“ “;571.1.只有顺序容器和关联容器支持迭代器遍历,各容只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别如下:器支持的迭代器的类别如下:容器容器支持的迭代器类别支持的迭代器类别vectorvector随机访问随

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论