标准模板类库STL.ppt

上传人:wuy****n92 文档编号:73438779 上传时间:2023-02-18 格式:PPT 页数:79 大小:1.11MB
返回 下载 相关 举报
标准模板类库STL.ppt_第1页
第1页 / 共79页
标准模板类库STL.ppt_第2页
第2页 / 共79页
点击查看更多>>
资源描述

《标准模板类库STL.ppt》由会员分享,可在线阅读,更多相关《标准模板类库STL.ppt(79页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 11.1 11.1 基本数据结构知识基本数据结构知识基本数据结构知识基本数据结构知识 11.2 11.2泛型程序设计与标准模板类库泛型程序设计与标准模板类库泛型程序设计与标准模板类库泛型程序设计与标准模板类库STLSTL简介简介简介简介 11.3 11.3 向量向量向量向量 11.4 11.4 链表类的使用链表类的使用链表类的使用链表类的使用 11.5 11.5 双端队列双端队列双端队列双端队列 11.6 11.6 栈与队列栈与队列栈与队列栈与队列 11.7 11.7 集合集合集合集合第第 11 章章标准模板类库标准模板类库STLSTL C+C+语言的标准模板类库语言的标准模板类库语言的标准

2、模板类库语言的标准模板类库STL(Standard Template Library)STL(Standard Template Library)已经成为一已经成为一已经成为一已经成为一个标准,它是一个基于模板的群性类库,包含群体类(链表、向量、栈、个标准,它是一个基于模板的群性类库,包含群体类(链表、向量、栈、个标准,它是一个基于模板的群性类库,包含群体类(链表、向量、栈、个标准,它是一个基于模板的群性类库,包含群体类(链表、向量、栈、队列、集合、映象),算法队列、集合、映象),算法队列、集合、映象),算法队列、集合、映象),算法(排序、查找排序、查找排序、查找排序、查找)以及迭代子以及迭代

3、子以及迭代子以及迭代子(iterator)(iterator)。本章将。本章将。本章将。本章将着重介绍着重介绍着重介绍着重介绍STLSTL的使用。的使用。的使用。的使用。实现了数组和链表,它们属于实现了数组和链表,它们属于实现了数组和链表,它们属于实现了数组和链表,它们属于线性群体线性群体线性群体线性群体。还有两种特殊的线性群体:。还有两种特殊的线性群体:。还有两种特殊的线性群体:。还有两种特殊的线性群体:栈和栈和栈和栈和队列队列队列队列。Ele1Ele1Ele2Ele2ElenElen入栈入栈入栈入栈出栈出栈出栈出栈栈顶栈顶栈顶栈顶栈底栈底栈底栈底图图图图栈的示意图栈的示意图栈的示意图栈的示

4、意图 栈是栈是栈是栈是只能从一端访问的线性群体只能从一端访问的线性群体只能从一端访问的线性群体只能从一端访问的线性群体,可以,可以,可以,可以访问的这一端称访问的这一端称访问的这一端称访问的这一端称栈顶栈顶栈顶栈顶,另一端称,另一端称,另一端称,另一端称栈底栈底栈底栈底。对栈。对栈。对栈。对栈顶位置的标记称为顶位置的标记称为顶位置的标记称为顶位置的标记称为栈顶指针栈顶指针栈顶指针栈顶指针,对栈底位置的,对栈底位置的,对栈底位置的,对栈底位置的标记称为标记称为标记称为标记称为栈底指针栈底指针栈底指针栈底指针。向栈顶添加元素称为向栈顶添加元素称为向栈顶添加元素称为向栈顶添加元素称为“压入栈压入栈压

5、入栈压入栈”(push)”(push),删除栈顶元素称为,删除栈顶元素称为,删除栈顶元素称为,删除栈顶元素称为“弹出栈弹出栈弹出栈弹出栈”(pop)”(pop)。栈中元素的添加和删除操作具有栈中元素的添加和删除操作具有栈中元素的添加和删除操作具有栈中元素的添加和删除操作具有“后进后进后进后进先出先出先出先出”(LIFOLIFO)的特性。的特性。的特性。的特性。【11.1 11.1 基本数据结构知识基本数据结构知识基本数据结构知识基本数据结构知识】有一种限定的线性数据群体叫有一种限定的线性数据群体叫有一种限定的线性数据群体叫有一种限定的线性数据群体叫双端队列双端队列双端队列双端队列,它类似于限定

6、删除和插入操作都,它类似于限定删除和插入操作都,它类似于限定删除和插入操作都,它类似于限定删除和插入操作都必须在两端进行的链表。必须在两端进行的链表。必须在两端进行的链表。必须在两端进行的链表。队列是一种特殊的线性群体。队列队列是一种特殊的线性群体。队列队列是一种特殊的线性群体。队列队列是一种特殊的线性群体。队列只能向一端添加元素只能向一端添加元素只能向一端添加元素只能向一端添加元素,从另一端删除,从另一端删除,从另一端删除,从另一端删除元素的线性群体,可以添加元素的一端称元素的线性群体,可以添加元素的一端称元素的线性群体,可以添加元素的一端称元素的线性群体,可以添加元素的一端称队尾队尾队尾队

7、尾,可以删除元素的一端称,可以删除元素的一端称,可以删除元素的一端称,可以删除元素的一端称队头队头队头队头。对队头位置的标记称为对队头位置的标记称为对队头位置的标记称为对队头位置的标记称为队头指针队头指针队头指针队头指针,对队尾位置的标记称为,对队尾位置的标记称为,对队尾位置的标记称为,对队尾位置的标记称为队尾指针队尾指针队尾指针队尾指针。Ele1Ele1出队出队出队出队入队入队入队入队Ele2Ele2ElenElen队头队头队头队头队尾队尾队尾队尾非线性群体:集合和映射。非线性群体:集合和映射。非线性群体:集合和映射。非线性群体:集合和映射。集合集合集合集合由若干个元素组成,对于一个指定的元

8、素,由若干个元素组成,对于一个指定的元素,由若干个元素组成,对于一个指定的元素,由若干个元素组成,对于一个指定的元素,它或者属于该集合,或者不属于;可以对两个集合求交集和差等。它或者属于该集合,或者不属于;可以对两个集合求交集和差等。它或者属于该集合,或者不属于;可以对两个集合求交集和差等。它或者属于该集合,或者不属于;可以对两个集合求交集和差等。映射映射映射映射则则则则类似于字典的功能,如一个身份证号码可以映射为某个确定的人,图书馆类似于字典的功能,如一个身份证号码可以映射为某个确定的人,图书馆类似于字典的功能,如一个身份证号码可以映射为某个确定的人,图书馆类似于字典的功能,如一个身份证号码

9、可以映射为某个确定的人,图书馆中一本书的编号和这本书也是一个映射。中一本书的编号和这本书也是一个映射。中一本书的编号和这本书也是一个映射。中一本书的编号和这本书也是一个映射。向队尾添加元素称为向队尾添加元素称为向队尾添加元素称为向队尾添加元素称为“入队入队入队入队”,删除队头元素称为,删除队头元素称为,删除队头元素称为,删除队头元素称为“出队出队出队出队”。队列中元素的添加和删除操作具有队列中元素的添加和删除操作具有队列中元素的添加和删除操作具有队列中元素的添加和删除操作具有“先进先出先进先出先进先出先进先出”(FIFOFIFO)的特性。的特性。的特性。的特性。图图图图队列的逻辑结构示意图队列

10、的逻辑结构示意图队列的逻辑结构示意图队列的逻辑结构示意图泛型程序设计泛型程序设计泛型程序设计泛型程序设计 将程序写得尽可能通用将程序写得尽可能通用将程序写得尽可能通用将程序写得尽可能通用 将算法从特定的数据结构中抽象出来,成为通用的将算法从特定的数据结构中抽象出来,成为通用的将算法从特定的数据结构中抽象出来,成为通用的将算法从特定的数据结构中抽象出来,成为通用的 C+C+的模板为泛型程序设计奠定了关键的基础的模板为泛型程序设计奠定了关键的基础的模板为泛型程序设计奠定了关键的基础的模板为泛型程序设计奠定了关键的基础 STLSTL是泛型程序设计的一个范例是泛型程序设计的一个范例是泛型程序设计的一个

11、范例是泛型程序设计的一个范例 容器容器容器容器(container)(container)迭代器迭代器迭代器迭代器(iterator)(iterator)算法(算法(算法(算法(algorithmsalgorithms)函数对象(函数对象(函数对象(函数对象(function objectfunction object)【11.211.2泛型程序设计与标准模板类库泛型程序设计与标准模板类库泛型程序设计与标准模板类库泛型程序设计与标准模板类库STLSTL简介简介简介简介】4命名空间(命名空间(命名空间(命名空间(NamespaceNamespace)一个命名空间将不同的标识符集合在一个命名作用域

12、一个命名空间将不同的标识符集合在一个命名作用域一个命名空间将不同的标识符集合在一个命名作用域一个命名空间将不同的标识符集合在一个命名作用域(named scopenamed scope)内)内)内)内 为了解决命名冲突为了解决命名冲突为了解决命名冲突为了解决命名冲突 例如,声明一个命名空间例如,声明一个命名空间例如,声明一个命名空间例如,声明一个命名空间NSNS:namspace NS namspace NS class File;class File;void Fun();void Fun();则引用标识符的方式如下,则引用标识符的方式如下,则引用标识符的方式如下,则引用标识符的方式如下,N

13、S:File NS:File objobj;NS:Fun();NS:Fun();没有声明命名空间的标识符都处于无名的命名空间中没有声明命名空间的标识符都处于无名的命名空间中没有声明命名空间的标识符都处于无名的命名空间中没有声明命名空间的标识符都处于无名的命名空间中概念和术语5命名空间(命名空间(命名空间(命名空间(NamespaceNamespace)可以用可以用可以用可以用usingusing来指定命名空间来指定命名空间来指定命名空间来指定命名空间 例如,经过以下声明:例如,经过以下声明:例如,经过以下声明:例如,经过以下声明:using NS:File;using NS:File;在当前作

14、用域中就可以直接引用在当前作用域中就可以直接引用在当前作用域中就可以直接引用在当前作用域中就可以直接引用FileFile using namespace std;using namespace std;命名空间命名空间命名空间命名空间stdstd中所有标识符都可直接引用中所有标识符都可直接引用中所有标识符都可直接引用中所有标识符都可直接引用 在新的在新的在新的在新的C+C+标准程序库中,所有标识符都声明在命名空间标准程序库中,所有标识符都声明在命名空间标准程序库中,所有标识符都声明在命名空间标准程序库中,所有标识符都声明在命名空间stdstd中,头文件都不使用扩展名中,头文件都不使用扩展名中,

15、头文件都不使用扩展名中,头文件都不使用扩展名概念和术语6容器容器容器容器 容器类是容纳、包含一组元素或元素集合的对象。容器类是容纳、包含一组元素或元素集合的对象。容器类是容纳、包含一组元素或元素集合的对象。容器类是容纳、包含一组元素或元素集合的对象。异类容器类与同类容器类异类容器类与同类容器类异类容器类与同类容器类异类容器类与同类容器类 顺序容器与关联容器顺序容器与关联容器顺序容器与关联容器顺序容器与关联容器 七种基本容器:七种基本容器:七种基本容器:七种基本容器:向量(向量(向量(向量(vectorvector)、双端队列()、双端队列()、双端队列()、双端队列(dequedeque)、列

16、表()、列表()、列表()、列表(listlist)、集)、集)、集)、集合(合(合(合(setset)、多重集合()、多重集合()、多重集合()、多重集合(multisetmultiset)、映射()、映射()、映射()、映射(mapmap)和多重)和多重)和多重)和多重映射(映射(映射(映射(multimapmultimap)概念和术语7容器的接口容器的接口容器的接口容器的接口 通用容器运算符通用容器运算符通用容器运算符通用容器运算符=,!=!=,=,=,=方法(函数)方法(函数)方法(函数)方法(函数)迭代方法迭代方法迭代方法迭代方法 begin()begin(),end()end(),

17、rbegin()rbegin(),rend()rend()访问方法访问方法访问方法访问方法 size()size(),max_sizemax_size()(),swap()swap(),empty()empty()8适配器适配器适配器适配器 适配器是一种接口类适配器是一种接口类适配器是一种接口类适配器是一种接口类 为已有的类提供新的接口。为已有的类提供新的接口。为已有的类提供新的接口。为已有的类提供新的接口。目的是简化、约束、使之安全、隐藏或者改变被修改类目的是简化、约束、使之安全、隐藏或者改变被修改类目的是简化、约束、使之安全、隐藏或者改变被修改类目的是简化、约束、使之安全、隐藏或者改变被修

18、改类提供的服务集合。提供的服务集合。提供的服务集合。提供的服务集合。三种类型的适配器:三种类型的适配器:三种类型的适配器:三种类型的适配器:容器适配器容器适配器容器适配器容器适配器 用来扩展用来扩展用来扩展用来扩展7 7种基本容器,它们和顺序容器相结合构成种基本容器,它们和顺序容器相结合构成种基本容器,它们和顺序容器相结合构成种基本容器,它们和顺序容器相结合构成栈、队列和优先队列容器栈、队列和优先队列容器栈、队列和优先队列容器栈、队列和优先队列容器 迭代器适配器迭代器适配器迭代器适配器迭代器适配器 函数对象适配器。函数对象适配器。函数对象适配器。函数对象适配器。概念和术语9迭代器迭代器迭代器迭

19、代器 迭代器是面向对象版本的指针,它们提供了访问容器、序列中每迭代器是面向对象版本的指针,它们提供了访问容器、序列中每迭代器是面向对象版本的指针,它们提供了访问容器、序列中每迭代器是面向对象版本的指针,它们提供了访问容器、序列中每个元素的方法。个元素的方法。个元素的方法。个元素的方法。概念和术语10算法算法算法算法 C+C+标准模板库中包括标准模板库中包括标准模板库中包括标准模板库中包括7070多个算法多个算法多个算法多个算法 其中包括查找算法,排序算法,消除算法,记数算法,比较其中包括查找算法,排序算法,消除算法,记数算法,比较其中包括查找算法,排序算法,消除算法,记数算法,比较其中包括查找

20、算法,排序算法,消除算法,记数算法,比较算法,变换算法,置换算法和容器管理等等。算法,变换算法,置换算法和容器管理等等。算法,变换算法,置换算法和容器管理等等。算法,变换算法,置换算法和容器管理等等。这些算法的一个最重要的特性就是它们的统一性,并且可以广泛这些算法的一个最重要的特性就是它们的统一性,并且可以广泛这些算法的一个最重要的特性就是它们的统一性,并且可以广泛这些算法的一个最重要的特性就是它们的统一性,并且可以广泛用于不同的对象和内置的数据类型。用于不同的对象和内置的数据类型。用于不同的对象和内置的数据类型。用于不同的对象和内置的数据类型。概念和术语11函数对象函数对象函数对象函数对象

21、一个行为类似函数的对象,它可以不需参数,也可以带有若一个行为类似函数的对象,它可以不需参数,也可以带有若一个行为类似函数的对象,它可以不需参数,也可以带有若一个行为类似函数的对象,它可以不需参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。干参数,其功能是获取一个值,或者改变操作的状态。干参数,其功能是获取一个值,或者改变操作的状态。干参数,其功能是获取一个值,或者改变操作的状态。任何普通的函数和任何重载了调用运算符任何普通的函数和任何重载了调用运算符任何普通的函数和任何重载了调用运算符任何普通的函数和任何重载了调用运算符operator()operator()的类的对的类的对

22、的类的对的类的对象都满足函数对象的特征象都满足函数对象的特征象都满足函数对象的特征象都满足函数对象的特征 STLSTL中也定义了一些标准的函数对象,如果以功能划分,可中也定义了一些标准的函数对象,如果以功能划分,可中也定义了一些标准的函数对象,如果以功能划分,可中也定义了一些标准的函数对象,如果以功能划分,可以分为算术运算、关系运算、逻辑运算三大类。为了调用这以分为算术运算、关系运算、逻辑运算三大类。为了调用这以分为算术运算、关系运算、逻辑运算三大类。为了调用这以分为算术运算、关系运算、逻辑运算三大类。为了调用这些标准函数对象,需要包含头文件些标准函数对象,需要包含头文件些标准函数对象,需要包

23、含头文件些标准函数对象,需要包含头文件。1219941994年年年年7 7月,月,月,月,STLSTL正式成为标准正式成为标准正式成为标准正式成为标准C+C+库的一部分。库的一部分。库的一部分。库的一部分。STLSTL中的群体类是基于模板的,它既包含线性群体类,也包含非线性群体中的群体类是基于模板的,它既包含线性群体类,也包含非线性群体中的群体类是基于模板的,它既包含线性群体类,也包含非线性群体中的群体类是基于模板的,它既包含线性群体类,也包含非线性群体类,其中主要有:类,其中主要有:类,其中主要有:类,其中主要有:vector(vector(向量向量向量向量)list(list(链表链表链表

24、链表)stack(stack(栈栈栈栈)queue(queue(队列队列队列队列)deque(deque(双端队列双端队列双端队列双端队列)set(set(集合集合集合集合)map(map(映射映射映射映射)STLSTL的迭代子可以看成是指针的推广,迭代子也可以是普通的指针。的迭代子可以看成是指针的推广,迭代子也可以是普通的指针。的迭代子可以看成是指针的推广,迭代子也可以是普通的指针。的迭代子可以看成是指针的推广,迭代子也可以是普通的指针。类型分类类型分类类型分类类型分类顺序访问:顺序访问:顺序访问:顺序访问:直接访问:直接访问:直接访问:直接访问:顺序迭代子使用顺序迭代子使用顺序迭代子使用顺

25、序迭代子使用+、-等进行移动,但只能顺序访等进行移动,但只能顺序访等进行移动,但只能顺序访等进行移动,但只能顺序访问群体类中的对象。问群体类中的对象。问群体类中的对象。问群体类中的对象。直接访问迭代子则可以直接访问群体类中的某个特直接访问迭代子则可以直接访问群体类中的某个特直接访问迭代子则可以直接访问群体类中的某个特直接访问迭代子则可以直接访问群体类中的某个特定对象。定对象。定对象。定对象。【标准模板类库标准模板类库标准模板类库标准模板类库STLSTL简介简介简介简介】STLSTL的算法是用函数模板实现的,可以实现对不同类型对象的通用操作。的算法是用函数模板实现的,可以实现对不同类型对象的通用

26、操作。的算法是用函数模板实现的,可以实现对不同类型对象的通用操作。的算法是用函数模板实现的,可以实现对不同类型对象的通用操作。排序(排序(排序(排序(sortsort、mergemerge)查找(查找(查找(查找(findfind、searchsearch)比较(比较(比较(比较(equalequal)集合(集合(集合(集合(includesincludes、setunionsetunion、setdifferencesetdifference)计算(计算(计算(计算(accumulateaccumulate、partialsumpartialsum)统计(统计(统计(统计(maxmax、mi

27、nmin)管理(管理(管理(管理(swapswap、fillfill、replacereplace、copycopy、uniqueunique、rotaterotate、reversereverse)堆操作(堆操作(堆操作(堆操作(makeheapmakeheap、pushheappushheap、popheappopheap、sortheapsortheap)算法与算法与算法与算法与STLSTL群体类之间群体类之间群体类之间群体类之间是通过迭代子来进行沟通的,算法面向迭代子,迭是通过迭代子来进行沟通的,算法面向迭代子,迭是通过迭代子来进行沟通的,算法面向迭代子,迭是通过迭代子来进行沟通的,算

28、法面向迭代子,迭代子则面向群体类代子则面向群体类代子则面向群体类代子则面向群体类,对于对于对于对于迭代子迭代子迭代子迭代子,可以将它理解为一个指针,通过它我们,可以将它理解为一个指针,通过它我们,可以将它理解为一个指针,通过它我们,可以将它理解为一个指针,通过它我们可以获得群体类内部的数据对象,然后算法对这个由迭代子获得的对象进可以获得群体类内部的数据对象,然后算法对这个由迭代子获得的对象进可以获得群体类内部的数据对象,然后算法对这个由迭代子获得的对象进可以获得群体类内部的数据对象,然后算法对这个由迭代子获得的对象进行操作。行操作。行操作。行操作。STLSTL的主要算法有:的主要算法有:的主要

29、算法有:的主要算法有:C+C+语言标准类库提供了语言标准类库提供了语言标准类库提供了语言标准类库提供了向量群体类向量群体类向量群体类向量群体类,向量既有象数组一样可以对群体类,向量既有象数组一样可以对群体类,向量既有象数组一样可以对群体类,向量既有象数组一样可以对群体类内部对象进行直接访问的特点,也有类似于链表可以对群体类内部对象进内部对象进行直接访问的特点,也有类似于链表可以对群体类内部对象进内部对象进行直接访问的特点,也有类似于链表可以对群体类内部对象进内部对象进行直接访问的特点,也有类似于链表可以对群体类内部对象进行顺序访问的特点,同时向量具有动态特征,所以行顺序访问的特点,同时向量具有

30、动态特征,所以行顺序访问的特点,同时向量具有动态特征,所以行顺序访问的特点,同时向量具有动态特征,所以C+C+语言中的向量群体语言中的向量群体语言中的向量群体语言中的向量群体类类类类具有数组和链表两者的优点具有数组和链表两者的优点具有数组和链表两者的优点具有数组和链表两者的优点。向量模板类中较为重要的成员函数有向量模板类中较为重要的成员函数有向量模板类中较为重要的成员函数有向量模板类中较为重要的成员函数有beginbegin、endend、insertinsert、erase erase、operator operator等。等。等。等。iterator insert(iterator it,

31、const T&x=T();iterator insert(iterator it,const T&x=T();/将将将将x x复制到复制到复制到复制到it it位置之前位置之前位置之前位置之前void insert(iterator it,sizetype n,const T&x);void insert(iterator it,sizetype n,const T&x);/将将将将n n个个个个x x复制到复制到复制到复制到it it位置之前位置之前位置之前位置之前void insert(iterator it,constiterator first,constiterator last)

32、;void insert(iterator it,constiterator first,constiterator last);/将将将将firstfirst和和和和lastlast /之间的对象复制到之间的对象复制到之间的对象复制到之间的对象复制到it it位置之前位置之前位置之前位置之前iterator erase(iterator it);iterator erase(iterator it);/移走移走移走移走it it位置的对象位置的对象位置的对象位置的对象iterator erase(iterator first,iterator last);iterator erase(ite

33、rator first,iterator last);/移走移走移走移走firstfirst到到到到lastlast之间的对象之间的对象之间的对象之间的对象用法如下:用法如下:用法如下:用法如下:beginbegin返回指向该向量的返回指向该向量的返回指向该向量的返回指向该向量的第一个对象的迭代子。第一个对象的迭代子。第一个对象的迭代子。第一个对象的迭代子。endend返回一个指向向返回一个指向向返回一个指向向返回一个指向向量末尾值的迭代子。量末尾值的迭代子。量末尾值的迭代子。量末尾值的迭代子。insertinsert和和和和eraseerase是向量类的是向量类的是向量类的是向量类的插入和删

34、除方法。插入和删除方法。插入和删除方法。插入和删除方法。【11.3 11.3 向量向量向量向量】向量应用举例向量应用举例向量应用举例向量应用举例(一一一一)/EXAMPLE11_1.CPP/EXAMPLE11_1.CPP#include#include#include#include#include#include#include#include#include#include using namespace std;using namespace std;void main()void main()说明一下说明一下说明一下说明一下copycopy和和和和accumulateaccumulat

35、e函数的用法:函数的用法:函数的用法:函数的用法:template OutIt copy(InIt first,InIt last,OutIt x);template OutIt copy(InIt first,InIt last,OutIt x);/该函该函该函该函 /数将从数将从数将从数将从firstfirst到到到到lastlast之间的对象依次赋给位置之间的对象依次赋给位置之间的对象依次赋给位置之间的对象依次赋给位置x x的对象,的对象,的对象,的对象,/同时同时同时同时x+x+。在本例中是赋给标准输出流。在本例中是赋给标准输出流。在本例中是赋给标准输出流。在本例中是赋给标准输出流。t

36、emplate T accumulate(InIt first,InIt last,T val);template T accumulate(InIt first,InIt last,T val);/在在在在firstfirst /和和和和lastlast之间依次取得对象值,每次该值与之间依次取得对象值,每次该值与之间依次取得对象值,每次该值与之间依次取得对象值,每次该值与valval的和替代原的和替代原的和替代原的和替代原valval值,返回值,返回值,返回值,返回valval。template T accumulate(InIt first,InIt last,T val,template

37、 T accumulate(InIt first,InIt last,T val,Pred pr);Pred pr);/在在在在firstfirst和和和和lastlast之间依次取得对象值,每次该值与之间依次取得对象值,每次该值与之间依次取得对象值,每次该值与之间依次取得对象值,每次该值与valval进行进行进行进行prpr运算后得到运算后得到运算后得到运算后得到的的的的 /新值新值新值新值(在例中用到在例中用到在例中用到在例中用到multiplies,multiplies,进行乘法运算进行乘法运算进行乘法运算进行乘法运算)替代原替代原替代原替代原valval值值值值,返回返回返回返回val

38、val。例例例例 11-1 11-1 11-1 11-1 vector nMyVector1,vector nMyVector1,/整型向量整型向量整型向量整型向量 nMyVector2;nMyVector2;/该向量类型的迭代子该向量类型的迭代子该向量类型的迭代子该向量类型的迭代子 vector:iterator nItBegin,nItEnd;vector:iterator nItBegin,nItEnd;/该向量类型的输出流迭代子该向量类型的输出流迭代子该向量类型的输出流迭代子该向量类型的输出流迭代子 ostreamiterator nOutput(cout,);ostreamitera

39、tor nOutput(cout,);/对向量类型对象中的数据进行顺序赋值对向量类型对象中的数据进行顺序赋值对向量类型对象中的数据进行顺序赋值对向量类型对象中的数据进行顺序赋值 for(int i=1;i=10;i+)for(int i=1;i=10;i+)nMyVector1.pushback(i);nMyVector1.pushback(i);/将该向量类型对象中的数据输出到标准输出流,显示出来。将该向量类型对象中的数据输出到标准输出流,显示出来。将该向量类型对象中的数据输出到标准输出流,显示出来。将该向量类型对象中的数据输出到标准输出流,显示出来。copy(nMyVector1.begi

40、n(),nMyVector1.end(),nOutput);copy(nMyVector1.begin(),nMyVector1.end(),nOutput);cout endl;cout endl;/该向量类型的迭代子被赋值该向量类型的迭代子被赋值该向量类型的迭代子被赋值该向量类型的迭代子被赋值 nItBegin =nMyVector1.begin();nItBegin =nMyVector1.begin();nItEnd =nMyVector1.end();nItEnd =nMyVector1.end();(续)(续)(续)(续)/用用用用insertinsert函数实现两个向量类型对象成

41、员数据的复制函数实现两个向量类型对象成员数据的复制函数实现两个向量类型对象成员数据的复制函数实现两个向量类型对象成员数据的复制 nMyVector2.insert(nMyVector2.begin(),nMyVector1.begin(),nMyVector1.end();nMyVector2.insert(nMyVector2.begin(),nMyVector1.begin(),nMyVector1.end();for(i=0;inMyVector2.size();i+)for(i=0;inMyVector2.size();i+)coutnMyVector2 coutnMyVector2i

42、 i;coutendl;coutendl;/用迭代子输出该向量类型对象的数据用迭代子输出该向量类型对象的数据用迭代子输出该向量类型对象的数据用迭代子输出该向量类型对象的数据 while(nItBegin!=nItEnd)while(nItBegin!=nItEnd)cout*nItBegin;cout*nItBegin;nItBegin+;nItBegin+;cout endl;cout endl;/用标准算法得到整型向量对象中所有数据的和用标准算法得到整型向量对象中所有数据的和用标准算法得到整型向量对象中所有数据的和用标准算法得到整型向量对象中所有数据的和 cout The sum of n

43、MyVector1 cout The sum of nMyVector1i i is:is:accumulate(nMyVector1.begin(),nMyVector1.end(),0.0f)accumulate(nMyVector1.begin(),nMyVector1.end(),0.0f)endl;endl;nItBegin=nMyVector1.begin();nItBegin=nMyVector1.begin();nItEnd =nMyVector1.end();nItEnd =nMyVector1.end();(续)(续)(续)(续)/用一个已经存在的向量对象初始化另一个向量对

44、象用一个已经存在的向量对象初始化另一个向量对象用一个已经存在的向量对象初始化另一个向量对象用一个已经存在的向量对象初始化另一个向量对象 vector nMyVector3(nItBegin,nItEnd);vector nMyVector3(nItBegin,nItEnd);vector nMyVector4(nMyVector3);vector nMyVector4(nMyVector3);/输出两个新的向量对象输出两个新的向量对象输出两个新的向量对象输出两个新的向量对象 copy(nMyVector3.begin(),nMyVector3.end(),nOutput);copy(nMyVe

45、ctor3.begin(),nMyVector3.end(),nOutput);cout endl;cout endl;copy(nMyVector4.begin(),nMyVector4.end(),nOutput);copy(nMyVector4.begin(),nMyVector4.end(),nOutput);cout endl;cout endl;1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 10

46、The sum of nMyVector1The sum of nMyVector1i i is:55 is:551 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 10(续)(续)(续)(续)向量应用举例(二)向量应用举例(二)向量应用举例(二)向量应用举例(二)/EXAMPLE11_2.CPP/EXAMPLE11_2.CPP/程序开始程序开始程序开始程序开始#pragma warning(disable:4786)#pragma warning(disable:4786)/防止一个编译警

47、告的出现防止一个编译警告的出现防止一个编译警告的出现防止一个编译警告的出现,过长的标识符过长的标识符过长的标识符过长的标识符(例如变例如变例如变例如变 /量名字长度超过量名字长度超过量名字长度超过量名字长度超过255255个个个个)将在将在将在将在debug(debug(程序调试状态程序调试状态程序调试状态程序调试状态)下被截断,以下同下被截断,以下同下被截断,以下同下被截断,以下同#include#include#include#include#include#include#include#include#include#include#include#include#include#in

48、clude using namespace std;using namespace std;/*/*声明使用声明使用声明使用声明使用stdstd名称空间,这里名空间是名称空间,这里名空间是名称空间,这里名空间是名称空间,这里名空间是ANSI C+ANSI C+为解决为解决为解决为解决C/C+C/C+程序员经常遇到的命程序员经常遇到的命程序员经常遇到的命程序员经常遇到的命名冲突而采取的一个措施,名空间内的变量、函数与其他名空间内的同名变量或者名冲突而采取的一个措施,名空间内的变量、函数与其他名空间内的同名变量或者名冲突而采取的一个措施,名空间内的变量、函数与其他名空间内的同名变量或者名冲突而采取

49、的一个措施,名空间内的变量、函数与其他名空间内的同名变量或者函数无关,这样增加了程序员对变量和函数命名的灵活性。函数无关,这样增加了程序员对变量和函数命名的灵活性。函数无关,这样增加了程序员对变量和函数命名的灵活性。函数无关,这样增加了程序员对变量和函数命名的灵活性。stdstd是标准名空间。是标准名空间。是标准名空间。是标准名空间。*/*/class Point class Point /Point/Point类的声明及实现类的声明及实现类的声明及实现类的声明及实现 private:private:/声明私有数据成员声明私有数据成员声明私有数据成员声明私有数据成员例例例例 11-2 11-2

50、 11-2 11-2 int x;int x;int y;int y;public:public:/声明对外接口声明对外接口声明对外接口声明对外接口 Point(int xx=0,int yy=0)Point(int xx=0,int yy=0)/带默认形参值的构造函数带默认形参值的构造函数带默认形参值的构造函数带默认形参值的构造函数 x=xx;y=yy;x=xx;y=yy;void display()void display()/显示函数显示函数显示函数显示函数 coutPoint(x,y);coutPoint(x,y);int getx()const return x;int getx()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com