您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 21天学通C++-第十八章-标准模板库STL
联系方式:北京源智天下科技有限公司第十八讲:标准模板库STL杨章伟e-mail:jtclass@163.com1-2北京源智天下科技有限公司联系方式:课程内容安排•标准库模板库•算法•容器•迭代器•综合练习•思考和习题1-3北京源智天下科技有限公司联系方式:标准模板库•STL是最新的C++标准函数库中的一个子集,这个庞大的子集占据了整个库的大约80%的分量。而作为在实现STL过程中扮演关键角色的模板则充斥了几乎整个C++标准函数库。•STL提供了一系列具有良好结构的通用C++组件,这些组件紧密协作,提供强大的功能。标准库的设计必须确保所有的模板算法既能操作库中的数据类型,也能操作C++固有的数据类型。1-4北京源智天下科技有限公司联系方式:程序•该范例中调用了STL中的函数,是第一个使用STL的程序,其实现功能如下。1-5北京源智天下科技有限公司联系方式:代码清单•1#includevector//包含头文件•2#includeiostream•3intmain()•4{•5std::vectordoublea;//定义数据变量•6std::vectordouble::const_iteratori;//定义变量•7a.push_back(1);//调用STL中函数•8a.push_back(2);•9a.push_back(3);•10a.push_back(4);•11a.push_back(5);//调用STL中函数•12for(i=a.begin();i!=a.end();++i)//循环输出•13{•14std::cout(*i)std::endl;//输出该容器内所有元素•15}•16return0;•17}1-6北京源智天下科技有限公司联系方式:的组成•STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。简单来说,其关系如图18-3所示。1-7北京源智天下科技有限公司联系方式:算法•算法部分主要由头文件algorithm,numeric和functional组成。algorithm是所有STL头文件中最大的一个,它是由一大堆模版函数组成的。一般可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。•头文件numeric体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。头文件functional中则定义了一些模板类,用以声明函数对象。1-8北京源智天下科技有限公司联系方式:容器•容器部分主要由头文件vector,list,deque,set,map,stack和queue组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表18-1总结一下它们和相应头文件的对应关系。1-9北京源智天下科技有限公司联系方式:数据结构描述实现头文件向量(vector)连续存储的元素vector列表(list)由节点组成的双向链表,每个结点包含着一个元素list双队列(deque)连续存储的指向不同元素的指针所组成的数组deque集合(set)由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序set多重集合(multiset)允许存在两个次序相等的元素的集合set栈(stack)后进先出的值的排列stack队列(queue)先进先出的执的排列queue优先队列(priority_queue)元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列queue映射(map)由{键,值}对组成的集合,以某种作用于键对上的谓词排列map多重映射(multimap)允许键对有相等的次序的映射map1-10北京源智天下科技有限公司联系方式:迭代器迭代器实际上是一种泛化指针,如果一个迭代器指向了容器中的某一成员,那么迭代器将可以通过自增自减来遍历容器中的所有成员。迭代器是联系容器和算法的媒介,是算法操作容器的接口,如图18-10所示。算法迭代器容器1-11北京源智天下科技有限公司联系方式:综合练习•该范例求出范围在2~N中的所有素数,其中N在程序运行时由键盘输入。1-12北京源智天下科技有限公司联系方式:包含I/O流控制头文件3#includevector//包含向量容器头文件4usingnamespacestd;//使用存储过程5voidmain()//主函数6{7vectorintA(10);//定义向量对象8intn;//定义整型变量9intprimecount=0,i,j;//定义变量并初始化10coutEnteravalue=2asupperlimit:;//输入提示11cinn;//接收n的输入12A[primecount++]=2;//赋值13for(i=3;in;i++)//循环输出素数14{15if(primecount==A.size())//到达向量大小16A.resize(primecount+10);//调用函数重新设置向量大小17if(i%2==0)//不是素数18continue;//继续循环19j=3;//赋初值20while(j=i/2&&i%j!=0)//循环判断是否素数21j+=2;//变量递加222if(ji/2)//是素数23A[primecount++]=i;//写入向量中24}25for(i=0;iprimecount;i++)//输出素数26{27coutsetw(5)A[i];//设置输出格式并输出28f((i+1)%10==0)//每输出10个数换行一次29coutendl;//输出换行30}31coutendl;//输出换行32}1-13北京源智天下科技有限公司联系方式:思考和习题•C++标准中为什么要引入STL的概念?•STL是一个模板库,但其中也包含了许多个部分。一般来说,STL由六大部分组成,其分别是哪6个部分,其作用分别是什么?•什么是迭代器?其作用是什么?•使用容器实现一个序列的排序,将一个序列按照升序排列输出。
本文标题:21天学通C++-第十八章-标准模板库STL
链接地址:https://www.777doc.com/doc-6125644 .html