STL与boost

待细化。。。。。。。。。。。

STL

STL是standard Template Library即标准模板库的英文缩写,

STL标准模板库(Standard Template Library

泛型编程思想

STL主要由几个核心部件组成,即迭代器、容器、算法、函数对象、适配器。容器即物之所属;算法是解决问题的方式;迭代器是对容器的访问逻辑的抽象,是连接算法和容器的纽带;迭代器通过添加了一种间接层的方式实现了容器和算法之间的独立;函数对象,就是重载了operator()操作符的对象;适配器是通过组合特定的容器实现的一种新的数据结构。

Algorithm算法

提供了大量基于迭代器的非成员模板函数。

提供sortmax等能力。

STL中算法大致分为四类:
1)非可变序列算法:指不直接修改其所操作的容器内容的算法。
2)可变序列算法:指可以修改它们所操作的容器内容的算法。
3)排序算法:对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。
4)数值算法:对容器内容进行数值计算。

Iterator(迭代器)

Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。

迭代器的作用:能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来,重载了*,++,==,!=,=运算符。用以操作复杂的数据结构,容器提供迭代器,算法使用迭代器;常见的一些迭代器类型:iteratorconst_iteratorreverse_iteratorconst_reverse_iterator,

容器

STL中的容器有队列容器和关联容器,容器适配器(congtainer adaptersstack,queuepriority queue),位集(bit_set),串包(string_package)等等。
1)序列式容器(Sequence containers),每个元素都有固定位置--取决于插入时机和地点,和元素值无关,vectordequelist
Vectors:将元素置于一个动态数组中加以管理,可以随机存取元素(用索引直接存取),数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;
Deques:是“double-ended queue”的缩写,可以随机存取元素(用索引直接存取),数组头部和尾部添加或移除元素都非常快速。但是在中部或头部安插元素比较费时;
Lists:双向链表,不提供随机存取(按顺序走到需存取的元素,O(n)),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;
2)关联式容器(Associated containers),元素位置取决于特定的排序准则,和插入顺序无关,setmultisetmapmultimap
Sets/Multisets:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现,便于查找;
Maps/MultimapsMap的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现,便于查找;

容器类自动申请和释放内存,无需newdelete操作

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

  在C++标准中,STL被组织为下面的13个头文件

Boost

Boost C++ 库可以提升一个 C++ 开发人员的生产力。 例如,你可以从智能指针中受益,帮助你写出更可靠的代码,或者使用某个库来开发平台独立的网络应用。

应用:

然后上程序上面测试,对于一个size大约15000的容器,大概每次循环需要进行20次FindpinweiValueInVector()函数的调用,所以在Vector中查找值的最坏的情况是时间复杂度为O(n),即进行15000*20,这还是每次的循环,当一个菜单执行完毕整整花了大概6个半小时左右,程序运行效率低下。


所以,必须要有一种查找效率较高的容器,就想到的map,map为平衡二叉树,查找效率为对数级别,时间复杂度为O(logN),查找相对来说较快,1000大小的数据最坏只需要3次就可以查找到,15000只需要4次多就可以查找到。


你可能感兴趣的:(STL与boost)