C++标准库和模板库

2017-01-12 19:04:53来源:CSDN作者:u012175089人点击

第七城市

C++标准库的内容总共在50个标准头文件中定义。
在C++开发中,要尽可能地利用标准库完成。
这样做的直接好处包括:
(1)成本:已经作为标准提供,何苦再花费时间、人力重新开发呢;
(2)质量:标准库的都是经过严格测试的,正确性有保证;
(3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平;
(4)良好的编程风格:采用行业中普遍的做法进行开发。
我的电脑上面的路径是:F:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/include
在VC的include目录下面
头文件有很多,可能是C++11新增的,下面没有。


一、C++标准库
C++标准库的内容可分为10类,虽然分了类,但是很多头文件可能包含多种类型的东西。
1.与语言支持功能相关的头文件
<cstddef>       定义宏NULL和offsetof,以及其他标准类型size_t和ptrdiff_t。
<limits>          提供与基本数据类型相关的定义。例如,对于每个数值数据类型,它定义了最大值和最小值以及二进制数字的位数。
<climits>        提供与基本整数数据类型相关的C样式定义。这些信息的C++样式定义在<limits>中
<cfloat>          提供与基本浮点型数据类型相关的C样式定义。这些信息的C++样式定义在<limits>中
<cstdlib>        提供支持程序启动和终止的宏和函数。还声明了许多其他杂项函数,例如搜索和排序,从字符串转换为数值,abort()等。 
<new>            支持动态内存分配
<typeinfo>      支持变量在运行期间的类型标识
<exception>   支持异常处理,这是处理程序中可能发生的错误的一种方式
<cstdarg>      支持接受数量可变的参数的函数。定义了宏va_arg、va_end、va_start以及va_list类型
<csetjmp>     为C样式的非本地跳跃提供函数。这些函数在C++中不常用
<csignal>      为中断处理提供C样式支持


2.支持流输入/输出的头文件
<iostream>     支持标准流cin、cout、cerr和clog的输入和输出,它还支持多字节字符标准流wcin、wcout、wcerr和wclog。
<iomanip>      提供操纵程序,允许改变流的状态,从而改变输出的格式。
<ios>                定义iostream的基类
<istream>       为管理输入流缓存区的输入定义模板类
<ostream>      为管理输出流缓存区的输出定义模板类
<sstream>      支持字符串的流输入输出
<fstream>       支持文件的流输入输出
<iosfwd>         为输入输出对象提供向前的声明
<streambuf>  支持流输入和输出的缓存
<cstdio>          为标准流提供C样式的输入和输出
<cwchar>        支持多字节字符的C样式输入输出


3. 与诊断功能相关的头文件
<stdexcept>   定义标准异常。异常是处理错误的方式
<cassert>      定义断言宏,用于检查运行期间的情形
<cerrno>        支持C样式的错误信息


4. 定义工具函数的头文件
<utility>            定义重载的关系运算符,简化关系运算符的写入,它还定义了pair类型。
<functional>   定义了许多函数对象类型和支持函数对象的功能
<memory>     给容器、管理内存的函数和智能指针模板类定义标准内存分配器
<ctime>          支持系统时钟函数


5. 支持字符串处理的头文件
<string>         为字符串类型提供支持和定义,包括单字节字符串(由char组成)的string和多字节字符串(由wchar_t组成)
<cctype>        单字节字符类别
<cwctype>     多字节字符类别
<cstring>       为处理非空字节序列和内存块提供函数。
<cwchar>      为处理、执行I/O和转换多字节字符序列提供函数。
<cstdlib>       为把单字节字符串转换为数值、在多字节字符和多字节字符串之间转换提供函数


6. 定义容器类的模板的头文件
<vector>       定义vector序列模板
<list>            定义list序列模板,这是一个序列的链表,常常在任意位置插入和删除元素
<deque>      定义deque序列模板,支持在开始和结尾的高效插入和删除操作,双端队列
<queue>      为队列(先进先出)数据结构定义序列适配器queue和priority_queue
<stack>        为堆栈(后进先出)数据结构定义序列适配器stack
<map>         map是一个关联容器类型,允许根据键值是唯一的,且按照升序存储。multimap类似于map,但键不是唯一的。
<set>           set是一个关联容器类型,用于以升序方式存储唯一值。multiset类似于set,但是值不必是唯一的。
<bitset>       为固定长度的位序列定义bitset模板,它可以看作固定长度的紧凑型bool数组


7. 支持迭代器的头文件
<iterator>    给迭代器提供定义和支持


8. 有关算法的头文件
<algorithm>  提供一组基于算法的函数,包括置换、排序、合并和搜索
<cstdlib>       声明C标准库函数bsearch()和qsort(),进行搜索和排序
<ciso646>    允许在代码中使用and代替&&


9. 有关数值操作的头文件
<complex>   支持复杂数值的定义和操作,复数
<valarray>    支持数值矢量的操作
<numeric>   在数值序列上定义一组一般数学操作,例如accumulate和inner_product
<cmath>      这是C数学库,其中还附加了重载函数,以支持C++约定
<cstdlib>      提供的函数可以提取整数的绝对值,对整数进行取余数操作


10. 有关本地化的头文件
<locale>     提供的本地化包括字符类别、排序序列以及货币和日期表示。
<clocale>   对本地化提供C样式支持,C++标准库的所有头文件都没有扩展名。


C++标准库以<cname>形式的标准头文件提供。
在<cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。
在C++中还可以使用name.h形式的标准C库头文件名。


二、标准模板库STL简介
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。
现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)。
几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
在C++标准中,STL被组织为下面的13个头文件:
<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>、<utility>。


1、算法
STL提供了大约100个实现算法的模版函数
算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。
<algorithm>是所有STL头文件中最大的一个,它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,
其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
<functional>中则定义了一些模板类,用以声明函数对象。


2、容器
容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。
<vector>:   向量(vector),连续存储的元素
<list>:        列表(list),由节点组成的双向链表,每个结点包含着一个元素
<deque>:  双向队列(deque),连续存储的指向不同元素的指针所组成的数组
<set>:        集合(set),由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列。
                      多重集合(multiset),允许存在多个相等的元素的集合。
<stack>:   栈(stack),后进先出的值的排列
<queue>:  队列(queue),先进先出的执的排列。优先队列(priority_queue),元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列
<map>:     映射(map),由{键,值}对组成的集合,以某种作用于键对上的谓词排列
                      多重映射(multimap)允许键对有相等的次序的映射
  
3、迭代器
迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。
<utility>       是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,
<iterator>   中提供了迭代器使用的许多方法,
<memory> 为容器中的元素分配存储空间,也为某些算法的临时对象提供机制,主要部分是模板类allocator,它负责产生所有容器中的默认分配器。


第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台