《C++Primer第五版(中文版)》的附录A.1“标准库名字和头文件”一节,列出了该书程序使用到的标准库名字及对应的头文件,但该列表仅仅是单纯地按首字母顺序罗列出使用过的标准库名字,并无分类,于读者无益。为有效认识和理解C++11标准库,以下对其进行标准库分类,希望于读者有所帮助。本文基于广为流传的《C++标准库头文件介绍》,列出在C++Primer中使用的标准库名字(名字对应的描述待后续补上)。
C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。<cname>形式的标准头文件【
C++标准库的内容分为10类:
C1.语言支持 |
C2.输入/输出 |
C3.诊断 |
C4.一般工具 |
C5.字符串 |
C6.容器 |
C7.迭代器支持 |
C8.算法 |
C9.数值操作 |
C10.本地化 |
语言支持功能。
头文件 |
描述 |
|
定义宏NULL和offsetof,以及其他标准类型size_t和ptrdiff_t。与对应的标准C头文件的区别是,NULL是C++空指针常量的补充定义,宏offsetof接受结构或者联合类型参数,只要他们没有成员指针类型的非静态成员即可。 |
|
提供与基本数据类型相关的定义。例如,对于每个数值数据类型,它定义了可以表示出来的最大值和最小值以及二进制数字的位数。 |
|
提供与基本整数数据类型相关的C样式定义。这些信息的C++样式定义在 |
|
提供与基本浮点型数据类型相关的C样式定义。这些信息的C++样式定义在 |
|
提供支持程序启动和终止的宏和函数。这个头文件还声明了许多其他杂项函数,例如搜索和排序函数,从字符串转换为数值等函数。它与对应的标准C头文件stdlib.h不同,定义了abort(void)。abort()函数还有额外的功能,它不为静态或自动对象调用析构函数,也不调用传给atexit()函数的函数。它还定义了exit()函数的额外功能,可以释放静态对象,以注册的逆序调用用atexit()注册的函数。清除并关闭所有打开的C流,把控制权返回给主机环境。 |
|
支持动态内存分配。 |
|
支持变量在运行期间的类型标识。 |
|
支持异常处理,这是处理程序中可能发生的错误的一种方式。 |
|
支持接受数量可变的参数的函数。即在调用函数时,可以给函数传送数量不等的数据项。它定义了宏va_arg、va_end、va_start以及va_list类型。 |
|
为C样式的非本地跳跃提供函数。这些函数在C++中不常用。 |
|
为中断处理提供C样式支持。 |
C++ Primer中使用的C1标准库。
名字 |
标准库 |
描述 |
ptrdiff_t |
|
|
size_t |
|
|
abort |
|
|
free |
|
|
malloc |
|
|
bad_alloc |
|
|
bad_array_new_length |
|
|
nothrow |
|
|
nothrow_t |
|
|
bad_cast |
|
|
type_info |
|
|
exception |
|
|
terminate |
|
|
unexpected |
|
|
支持流输入/输出。
头文件 |
描述 |
|
支持标准流cin、cout、cerr和clog的输入和输出,它还支持多字节字符标准流wcin、wcout、wcerr和wclog。 |
|
提供操纵程序,允许改变流的状态,从而改变输出的格式。 |
|
不依赖模板参数的输入和输出流通用的存储和成员函数 |
|
定义iostream的基类。 |
|
为管理输入流缓存区的输入定义模板类。 |
|
为管理输出流缓存区的输出定义模板类。 |
|
支持字符串的流输入输出。 |
|
支持文件的流输入输出。 |
|
为输入输出对象提供向前的声明。 |
|
支持流输入和输出的缓存。 |
|
为标准流提供C样式的输入和输出。 |
|
支持多字节字符的C样式输入输出。 |
C++ Primer中使用的C2标准库。
名字 |
标准库 |
描述 |
ios_base |
|
|
internal |
|
|
scientific |
|
|
cerr |
|
|
cin |
|
|
cout |
|
|
dec |
|
|
oct |
|
|
default_float_engine |
|
|
endl |
|
|
ends |
|
|
fixed |
|
|
flush |
|
|
hex |
|
|
hexfloat |
|
|
istream |
|
|
ostream |
|
|
left |
|
|
right |
|
|
boolalpha |
|
|
noboolalpha |
|
|
noshowbase |
|
|
showbase |
|
|
noshowpoint |
|
|
showpoint |
|
|
noskipws |
|
|
skipws |
|
|
nounitbuf |
|
|
unitbuf |
|
|
nouppercase |
|
|
uppercase |
|
|
setfill |
|
|
setprecision |
|
|
setw |
|
|
stringstream |
|
|
istringstream |
|
|
ostringstream |
|
|
fstream |
|
|
ifstream |
|
|
ofstream |
|
|
诊断功能。
头文件 |
描述 |
|
定义标准异常。异常是处理错误的方式 |
|
定义断言宏,用于检查运行期间的情形 |
|
支持C样式的错误信息 |
C++ Primer中使用的C3标准库。
名字 |
标准库 |
描述 |
domain_error |
|
|
logic_error |
|
|
out_of_range |
|
|
range_error |
|
|
runtime_error |
|
|
工具函数。
头文件 |
描述 |
|
定义重载的关系运算符,简化关系运算符的写入,它还定义了pair类型,该类型是一种模板类型,可以存储一对值。这些功能在库的其他地方使用 |
|
定义了许多函数对象类型和支持函数对象的功能,函数对象是支持operator()()函数调用运算符的任意对象 |
|
给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器 |
|
支持系统时钟函数 |
|
C++11 新增。 提供了诸如 std::chrono::duration 和 std::chrono::time_point 等的时间元素,还有时钟。 |
C++ Primer中使用的C4标准库。
名字 |
标准库 |
描述 |
forward |
|
|
make_pair |
|
|
move |
|
|
pair |
|
|
swap |
|
|
bind |
|
|
cref |
|
|
function |
|
|
greater |
|
|
hash |
|
|
less |
|
|
less_equal |
|
|
negate |
|
|
not1 |
|
? |
placeholders |
|
|
placeholders::_1 |
|
|
plus |
|
|
ref |
|
|
mem_fn |
|
|
allocator |
|
|
auto_ptr |
|
|
make_shared |
|
|
uninitialized_copy |
|
|
uninitialized_fill |
|
|
shared_ptr |
|
|
unique_ptr |
|
|
weak_ptr |
|
|
time |
|
|
字符串处理。
头文件 |
描述 |
|
为字符串类型提供支持和定义,包括单字节字符串(由char组成)的string和多字节字符串(由wchar_t组成) |
|
单字节字符类别 |
|
多字节字符类别 |
|
为处理非空字节序列和内存块提供函数。这不同于对应的标准C库头文件,几个C样式字符串的一般C库函数被返回值为const和非const的函数对替代了 |
|
为处理、执行I/O和转换多字节字符序列提供函数,这不同于对应的标准C库头文件,几个多字节C样式字符串操作的一般C库函数被返回值为const和非const的函数对替代了。 |
|
为把单字节字符串转换为数值、在多字节字符和多字节字符串之间转换提供函数 |
|
C++11 新增。提供了用正则表达式进行字符串匹配的功能。 |
C++ Primer中使用的C5标准库。
名字 |
标准库 |
描述 |
getline |
|
|
stoi |
|
|
string |
|
|
strtod |
|
|
isalpha |
|
|
islower |
|
|
issprint |
|
|
ispunct |
|
|
isspace |
|
|
isupper |
|
|
tolower |
|
|
toupper |
|
|
strcmp |
|
|
strcpy |
|
|
strlen |
|
|
strncpy |
|
|
cmatch |
|
|
csub_match |
|
|
regex |
|
|
regex_constants |
|
|
regex_error |
|
|
regex_match |
|
|
regex_replace |
|
|
regex_search |
|
|
smatch |
|
|
sregex_iterator |
|
|
ssub_match |
|
|
容器类的模板。
头文件 |
描述 |
|
定义vector序列模板,这是一个大小可以重新设置的数组类型,比普通数组更安全、更灵活 |
|
定义list序列模板,这是一个序列的链表,常常在任意位置插入和删除元素 |
|
定义deque序列模板,支持在开始和结尾的高效插入和删除操作 |
|
为队列(先进先出)数据结构定义序列适配器queue和priority_queue |
|
为堆栈(后进先出)数据结构定义序列适配器stack |
|
map是一个关联容器类型,允许根据键值是唯一的,且按照升序存储。multimap类似于map,但键不是唯一的。 |
|
set是一个关联容器类型,用于以升序方式存储唯一值。multiset类似于set,但是值不必是唯一的。 |
|
为固定长度的位序列定义bitset模板,它可以看作固定长度的紧凑型bool数组 |
|
C++11 新增。提供了容器类模板 std::array,固定大小数组的容器。 |
|
C++11 新增。提供了单向链表容器类模板 std::forward_list。 |
|
C++11 新增。一个非常轻量级的表示初始化器列表的类模板initializer_list及有关函数。 |
|
C++11 新增。提供了容器类模板 std::unordered_map 和 std::unordered_multimap,它们都属于哈希表(散列表)。 |
|
C++11 新增。提供了容器类模板 std::unordered_set 和 std::unordered_multiset。 |
|
C++11 新增。提供了元组 std::tuple。 |
|
C++11 新增。模板元基础库。可实现在编译期计算、判断、转换、查询等等功能 |
C++ Primer中使用的C6标准库。
名字 |
标准库 |
描述 |
vector |
|
|
list |
|
|
deque |
|
|
queue |
|
|
priority_queue |
|
|
stack |
|
|
map |
|
|
multimap |
|
|
set |
|
|
multiset |
|
|
bitset |
|
|
array |
|
|
forward_list |
|
|
initializer_list |
|
|
unordered_map |
|
|
unordered_multimap |
|
|
unordered_set |
|
|
unordered_multiset |
|
|
get |
|
|
make_tuple |
|
|
tuple |
|
|
tuple_element |
|
|
tuple_size |
|
|
remove_pointer |
|
|
remove_reference |
|
|
迭代器。
头文件 |
描述 |
|
给迭代器提供定义和支持 |
C++ Primer中使用的C7标准库。
名字 |
标准库 |
描述 |
back_iterator |
|
|
begin |
|
|
end |
|
|
front_ inserter |
|
|
inserter |
|
|
istream_ iterator |
|
|
ostream_ iterator |
|
|
make_move_iterator |
|
|
reverse_ iterator |
|
|
算法。
头文件 |
描述 |
|
提供一组基于算法的函数,包括置换、排序、合并和搜索 |
|
声明C标准库函数bsearch()和qsort(),进行搜索和排序 |
|
允许在代码中使用and代替&& |
C++ Primer中使用的C8标准库。
名字 |
标准库 |
描述 |
copy |
|
|
count |
|
|
count_if |
|
|
equal_range |
|
|
fill |
|
|
fill_n |
|
|
find |
|
|
find_end |
|
|
find_first_of |
|
|
find_if |
|
|
for_each |
|
|
lower_bound |
|
|
max |
|
|
max_element |
|
|
min |
|
|
nth_element |
|
|
partial_sort |
|
|
replace |
|
|
replace_copy |
|
|
set_difference |
|
|
set_intersection |
|
|
set_union |
|
|
sort |
|
|
stable_sort |
|
|
transform |
|
|
unique |
|
|
unique_copy |
|
|
upper_bound |
|
|
数值操作。
头文件 |
描述 |
|
支持复杂数值的定义和操作 |
|
支持数值矢量的操作 |
|
在数值序列上定义一组一般数学操作,例如accumulate和inner_product |
|
这是C数学库,其中还附加了重载函数,以支持C++约定 |
|
提供的函数可以提取整数的绝对值,对整数进行取余数操作 |
|
C++11新增。(伪)随机数相关。 |
C++ Primer中使用的C9标准库。
名字 |
标准库 |
描述 |
accumulate |
|
|
bernoulli_distribution |
|
|
default_random_engine |
|
|
normal_distribution |
|
|
rand |
|
|
random_device |
|
|
uniform_int_distribution |
|
|
uniform_real_distribution |
|
|
lround |
|
|
sqrt |
|
|
本地化。
头文件 |
描述 |
|
提供的本地化包括字符类别、排序序列以及货币和日期表示。 |
|
对本地化提供C样式支持 |
|
C++11新增。提供了不同代码页(code page)之间字符编码的转换功能。 |
头文件 |
描述 |
|
C++11新增。提供了使用线程所需要的类和 namespace。 |
|
C++11新增。这里面有互斥对象(mutex),锁(lock),还有 once(一种用来保证某函数在某进程中只执行一次的对象) |
|
C++11新增。条件变量。一个条件变量代表一个条件,当一个条件变量等待时,它会阻塞当前线程,直到它代表的条件为真。 |
|
C++11新增。可以用它来进行便捷的异步操作,以免代码中出现一大堆回调函数。 |
评论:《C++ Primer第五版》作为一本入门书籍,其附录A1确实写的不敢恭维,必须专门帮它分类整理。另外,其用意本是大力推广C++11标准,但却对线程支持只字不提,又不免为人所诟病。
【1】C++标准库头文件介绍. https://blog.csdn.net/piao1024287076/article/details/52671278
【2】C++标准库概览(一分钟就看完了). https://www.cnblogs.com/findumars/p/6760029.html