C++STL概览
来源:互联网 发布:易语言录制视频源码 编辑:程序博客网 时间:2024/05/16 10:07
文章转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/03/2310884.html
版权归原作者!
引言
C++ STL可以分为标准容器,算法和函数对象,迭代器和分配器,利用C++标准程序库,可以大量减少我们的代码,提高代码的稳定性和健壮性。
标准容器
C++标准容器分为序列容器和关联容器。
对于序列容器,C++提供的基本序列有
vector 支持随机访问,不适合做插入和删除操作频繁的场景list 双向链表,适合做元素的插入和删除,不是随机访问deque 也是一个双端序列,但是经过优化,其双端操作效率类似list,随即访问效率接近vector。从它们出发,通过定义适当的借口,生成了stack 默认用deque实现queue 默认是deque实现priority_queue 默认是vector保存元素,实现最可能是heap
对于关联容器,C++提供的有:
map 映射mulitimap 多重映射,相比map,允许重复的keyset 被看做是一个map,其中的值是无关紧要的mulitiset 相比set,允许重复的keybitset 位集合hash_map 散列映射,通过实现一个散列函数,将容器实现为一个散列表,以减少查找元素所需要的时间
标准容器具体用法可以参考C++在线手册STL容器:http://www.cplusplus.com/reference/stl/
算法和函数对象
容器本身之所以有用,是因为容器提供了一些基本操作,如确定大小,迭代,复制,排序,查找等。标准库提供了许多算法,服务于容器用户的最普遍和最基本的需要。
标准库算法不过就是60个,每个算法都描述为一个模板函数或一组模板函数,例如最常用的排序算法:sort,能以很好的平均效率排序,建议排序都用sort替换C语言的qsort,sort可以更好结合容器。
标准库算法和函数对象的教程可以参考C++之父的C++程序设计语言的算法和函数对象,这一章内容可以教你如何使用标准库算法和函数对象。
标准库算法的声明在,函数对象在里。
标准库算法具体用法参考C++在线手册STL算法:http://www.cplusplus.com/reference/algorithm/
迭代器和分配器
迭代器是连接容器和算法的纽带,让写算法的人不必关心各种数据结构的具体细节,而分配器提供了一个映射,将低级的字节形式的数据模型映射到高级的对象模型。
迭代器是每个程序员都需要关心的概念之一,但是分配器仅仅是一个支持机制,标准库已经提供了默认的分配器,很少有程序员需要去写新的分配器。
迭代器在接触STL容器就会了解了,一般迭代器分为正向迭代器,反向迭代器,插入迭代器,带检查的迭代器。
至于分配器提供了一套分配和释放存储的标准方式,标准库提供了一个标准分配器,在里的标准allocator模板用operator new()分配存储,所有的标准容器在默认情况下使用它,当然你也可以自己实现一个分配器,容器的实现需要一次次的allocate()或者deallocate()对象,意味着new的大量调用,你可以采用一个固定大小存储块的存储池,可以比常规的更通用的operator new()的效率高一些。
总结
学习C++标准程序库,可以先学会应用标准容器的简单用法,如vector,map,慢慢熟悉之后,再接触算法,也是学习算法的几个函数的简单用法,例如sort,swap等。
学会应用可以学习理论:考虑看下C++之父的C++程序设计语言的标准库,也可以看更厚的书:C++标准程序库。
最后,你在工作和编程中,都需要C++容器和算法的手册查阅,这些可以参考上面的网址:
C++在线手册STL容器:http://www.cplusplus.com/reference/stl/
C++在线手册STL算法:http://www.cplusplus.com/reference/algorithm/
这里面详细介绍了每个容器和算法的每个函数,几乎95%都有例子,是很好的参考资料
- C++STL概览
- C++STL概览
- C++STL概览
- 【温故而知新】C和C++4:STL概览
- STL概览
- STL概览-缘起(一)
- Learning a Part of C++(for ACM/ICPC) (5) STL概览
- C语言概览
- c 语言手册概览
- C语言概览
- C语言概览
- C语言概览
- STL概览-序列容器vector,deque,list
- 【C++ STL应用与实现】1: STL概览和分类
- (Python编程)C扩展概览
- C语言学习_001_概览
- C primer plus---第一章:概览
- C/C++头文件概览
- 16进制字符串转16进制数字
- 寻找coder
- Python中可迭代对象和迭代器对象的理解
- ODAC安装配置与使用详解
- [单纯形+对偶] BZOJ3118: Orz the MST
- C++STL概览
- hibernate的ORM映射
- GPIO、UART、USB、IrDA、I2C、SPI、CAN总线、蓝牙接口、以太网
- servlet监听
- 欢迎使用CSDN-markdown编辑器
- OTT解决方案的直播时移技术
- 墙裂推荐一款神器,能免费下载付费音乐
- hibernateORM映射:双向多对一
- JavaScript 面向对象思想以及原型、继承