资源描述:
《常用STL容器与泛型算法.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、STL容器与泛型算法常用STL基本用法泛型算法auto_ptrSTL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是Alexander StepanovMeng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板
2、类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:、、、、、、
3、setMapandMultimap容器共有的操作ContTypec创建一个空的容器ContTypec1(c2)创建一个拷贝C2内容的容器ContTypec(beg,end)创建一个包含(BEG,END)间数据的容器c.~ContType()删除所有数据和释放内存c.size()返回元素的个数c.empty()清空容器数据c1==c2c1返回c1是否与c2相等c1!=c2返回c1是否与c2不相等c1c2返回C1是否大于C2c1<=c2返回C1是否小于等于C2容器共有的操作c1>=c2返回C1是
4、否大于等于C2c1=c2赋值操作(内部元素拷贝)c1.swap(c2)交换C1和C2的数据swap(c1,c2)交换C1和C2的数据c.begin()返回一个iterator指向第一个元素c.end()返回一个iterator指向最后一个元素的后一个位置c.rbegin()返回一个reverseiterator指向第一个元素c.rend()返回一个reverseiterator指向最后一个元素的后一个位置c.insert(pos,elem)插入一个元素c.erase(beg,end)删除(beg,end)间所有元素c.cl
5、ear()删除容器所有元素vectorVector是一个动态数组,支持内存自动增长,使用需要包含#includevector有如下初始化方法vectorcvectorc1(c2)vectorc(n)vectorc(n,elem)vectorc(beg,end)Vector基本操作c.insert(pos,elem)c.insert(pos,n,elem)c.insert(pos,beg,end)c.push_back(elem)c.pop_back
6、()c.erase(pos)c.erase(beg,end)c.resize(num)c.resize(num,elem)c.clear()用例分析用例分析Deque(“deck”)和VECTOR一样,也可以看成一个动态数组,不过区别在于Deque是两端开放的,也就是一个双向队列。使用该容器要包含#include与VECTOR相同点:很多基本操作都是一样的,删除容器中部的一个数据速度差不多与VECTOR的不同点在尾端或末端插入或删除元素比较快内部结构存在多种存取方式,因此存储元素或移动iterator会比VE
7、CTOR稍微慢DEQUE由于分配的是多块内存,max_size()可能大些DEQUE不支持capacity()andreserve(),也就是说不支持reserve分配内存注意插入或删除操作都有可能造成容器的内存重新分配,因此以前指向其它元素iterators可能会无效。例子LISTLIST实际上就是一个双向链表头文件#includeLIST不能提供随机存取,比如要存储第5个元素,由前四个元素组成的链表必须要建好,访问LIST里任意一个元素比较慢。插入和删除元素非常快,因为不存在移动其它元素的操作插入和删除元素
8、不会使其它元素的指针,引用,迭代器失效LIST每个元素都有自己的内存,所以不需要capacityorreallocationLIST有自己的一些移动元素的算法,因为它只需要改变指针LIST操作c.insert(pos,elem)c.insert(pos,n,elem)c.insert(pos,beg,e