[ppt模板]c+ stl

上传人:tia****nde 文档编号:70555979 上传时间:2019-01-17 格式:PPT 页数:36 大小:518.05KB
返回 下载 相关 举报
[ppt模板]c+ stl_第1页
第1页 / 共36页
[ppt模板]c+ stl_第2页
第2页 / 共36页
[ppt模板]c+ stl_第3页
第3页 / 共36页
[ppt模板]c+ stl_第4页
第4页 / 共36页
[ppt模板]c+ stl_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《[ppt模板]c+ stl》由会员分享,可在线阅读,更多相关《[ppt模板]c+ stl(36页珍藏版)》请在金锄头文库上搜索。

1、12:28:08,1,C+标准模板库(Standard Template Library, 简称STL),12:28:08,2,标准模板库简介,库(library)是一系列程序组件的集合,它们可以在不同的程序中重复使用。库函数设计的第一位的要求就是通用性 模板(template)为通用性带来了不可估量的前景。 标准模板库(Standard Template Library)简称STL,是 C+最有特色、最实用的部分之一。 STL包含: 容器(container)、 迭代器(iterator)、 算法(algorithm)、函数对象(function object),12:28:08,3,与标准

2、模板库有关的概念和术语 C+标准模板库中的容器 迭代器 标准C+库中的算法,12:28:08,4,概念和术语,容器:常用模板化的数据类型, 可以容纳一组元素或元素集合 STL中有7种基本容器 vector(向量)从后面快速插入与删除,直接访问任何元素 deque(双端队列)从前面或后面快速插入与删除,直接访问任何元素 list (列表)从任何地方快速插入与删除,顺序访问元素 set (集合)快速查找,不允许重复值 Multiset(多重集合)快速查找,允许重复值 map(一对一映射)基于关键字快速查找,不允许重复值 multimap一对多映射,基于关键字快速查找,允许重复值,12:28:08,

3、5,适配器:STL有种适配器,是用来扩展7种基本容器的容器 栈适配器:与一种基础容器相结合,来实现后进先出(LIFO)数据结构。 队列适配器:与一种基础容器相结合,来实现的先进先出(FIFO)数据结构。 优先级队列(priority_queue)适配器:用以实现优先级队列,12:28:08,6,12:28:08,7,迭代器(interator): 迭代器是指针概念的泛型化,它指向容器中的元素,它能象指针一样增减,轮流指示容器中每个元素。所以说迭代器是面向对象版本的指针。 迭代器可以包括指针,但迭代器又不仅仅是一个指针。 迭代器把算法与容器连接起来。算法只是间接通过迭代器操作容器元素,算法本身与

4、容器无关。算法通常返回迭代器。 如: iterator erase(iterator it) /删除it指向的元素 iterator erase( iterator first, iterator last) /删除first,last)范围指向的元素,12:28:08,8,迭代器的使用 如: vector:iterator it; /it为向量容器中的迭代器 for( it=a.begin(); it!=a.end(); +it ) cout *it“ “;,12:28:08,9,向量容器 vector,使用向量容器 向量容器的构造 向向量容器放置元素 push_back,insert,运算

5、符“=”,下标运算符 删除向量容器中的元素 pop_back,erase,clear 访问向量容器中的元素 front,back,下标运算符 使用迭代器,12:28:08,10,#include #include using namespace std; struct Student string number; string name; string sex; float score1,score2,score3,aver; ; vector StuVec;,void addStu() Student* stu; char choi; while(true) coutchoi; if(cho

6、i=n|choi=N)break; stu=new Student coutstu-number; cinstu-name; cinstu-sex; cinstu-score1; cinstu-score2; cinstu-score3; stu-aver=(stu-score1+stu-score2+stu-score3)/3; StuVec.push_back(stu); ,12:28:08,12,void Display() vector:iterator it; for(it=StuVec.begin(); it!=StuVec.end(); +it ) coutnumbername

7、sexscore1 score2score3 averendl; ,12:28:08,13,C+使用运算符new和delete能更好、更简单地进行内存的分配和释放。 new运算符的语法格式为: new 类型名 new 类型名(初始值) 注: new运算符按要求分配一块内存,并返回指向该内存起始地址的指针;当动态空间申请不成功时,new运算符返回空指针NULL。 new可以自动计算所要分配内存的类型的大小,而不必用sizeof来计算。 可以用new将分配内存的变量初始化。但当动态申请的是构造数据类型时,不允许有初始值。,12:28:08,14,如: int *p; p=new int(10);

8、/动态分配内存,并将10作为初始值赋给它 cout*pendl; delete p;,char *pstr = new char10; / 申请一个一维字符数组空间由字符类型指针pstr指向 Student* stu=new Student;,15,双端队列 deque,双端队列是一种放松了访问权限的队列。元素可以从队列的两端入队和出队,使用双端队列容器 向双端队列容器放置元素 push_back,insert,运算符“=”,下标运算符 push_front 删除双端队列容器中的元素 pop_front, pop_back ,erase,clear 访问双端队列容器中的元素 front,bac

9、k,下标运算符 使用迭代器,#include #include #include using namespace std; int main() deque de,value; deque:iterator it; de.push_front(2.2); de.push_front(3.5); de.push_back(1.1); for(int i=0;ide.size();i+) coutdei“ “; coutendl; de.pop_front(); value=de; for(it=value.begin(); it!=value.end(); +it ) cout*it“ “; g

10、etchar(); ,17,列表容器 list,由于列表容器是顺序访问的容器,它就与向量容器不同,如没有和at()的操作。 列表主要用于存放双向链表,可以从任意一端开始遍历。列表还提供了拼接(splicing)操作,将一个序列中的元素插入到另一个序列中。,12:28:08,18,例: 从键盘输入10个整数,用这些整数值作为结点数据,生成一个链表,按顺序输出链表中结点的数值。然后从键盘输入一个待查找整数,在链表中查找该整数,若找到则删除该整数所在的结点(如果出现多次,全部删除),然后输出删除结点以后的链表。在程序结束之前清空链表。,19,#include #include using names

11、pace std ; int main() list Link; /构造一个列表用于存放整数链表 int i, key, item; for(i=0;i item; Link.push_front(item); cout“List: “; / 输出链表,19,20,list:iterator p=Link.begin(); while(p!=Link.end() /输出各节点数据,直到链表尾 cout key; Link.remove(key); /void remove(const T ,20,12:28:08,21,关联容器,它们能通过关键字(search key)直接访问(存储和读取元素

12、)。四个关联容器为:集合(set),多重集合(multiset),映射(map)和多重映射(multimap)。,12:28:08,22,集合和多重集合,集合和多重集合提供了控制数值集合的操作,其中数值是关键字,即不必另有一组值与每个关键字相关联。 多重集合允许重复的关键字(key),而集合不允许 元素的顺序由比较器函数对象(comparator function object)确定。如对整型multiset,只要用比较器函数对象less为排序关键字,元素即可按升序排列。 template, typename A = allocator class set;,12:28:08,23,set容器

13、的构造方法: set (); /构造一个空的按默认次序排列的集合 set (pr); /构造一个空的按函数对象pr排序的集合 set (first,last); /构造一个默认次序排列的集合, /元素值由区间first,last)指定的序列复制 set (first,last,pr); /同上,但按函数对象pr排序,12:28:08,24,#include #include using namespace std; int main() int a=17,11,29,89,73,53,61,37,41,29,3,47,31,59,5,2; set intset(a,a+16); /用a来初始化

14、 set:iterator it; for(it=intset.begin();it!=intset.end();it+)/输出容器中全部元素 cout*it“ “; it=intset.find(17);/找到则返回所在位置 if (it=intset.end() cout“没找到值17“endl; else intset.erase(it); cout“n容器中有“endl; for(it=intset.begin();it!=intset.end();it+) cout*it“ “; return 0; ,int main() int a=17,11,29,89,73,53,61,37,

15、41,29,3,47,31,59,5,2; multiset intMultiset(a,a+16); /用a来初始化 cout:iterator it; cout“intMultiset容器中有“endl; for(it=intMultiset.begin(); it!=intMultiset.end();it+)/输出容器中全部元素 cout*it“ “; return 0; ,12:28:08,26,映射和多重映射,映射和多重映射引入: 它们提供了操作与关键字相关联的映射值(mapped value)的方法。 能自动按关键字进行排序 映射和多重映射的主要差别在于多重映射允许存放与映射值相

16、关联的重复关键字,而映射只允许存放与映射值一一对应的单一关键字。 多重映射和映射关联容器类用于快速存储和读取关键字与相关值(关键字/数值对,key/value pair)。例如,若按学号排序,使用映射关联容器(因为不会重号)是最合适的。若用平均分排序,因平均分可能重复,使用多重映射更为合适。使用时要用头文件。,12:28:08,27,map容器有多种构造方法: map (); /构造一个空的按默认次序排列的映射 map (pr); /构造一个空的按函数对象pr排序的映射 map (first,last); /构造按默认次序排列的映射, /元素值由区间first,last)指定的有序序列复制 map (first,last,pr);

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号