文章目录
在使用 C++ 编程中,最重要的库就是 C++ 标准库。C++ 标准库的核心是泛型容器和泛型算法,库中的这一子集通常称为标准模板库(Standard Template Library, STL),因为这一部分大量使用了模板。STL 的威力在于提供了泛型容器和泛型算法,使大部分算法可用于大部分容器,而无论容器中保存的数据类型是什么。性能是 STL 中非常重要的一部分。STL 的目标是要让 STL 容器和算法和手工编写的代码速度相当快。
编码原则
标准库大量使用了C++的模板特性和运算符重载特性,标准模板库也是这样。
C++标准库概述
字符串
从技术角度,C++ string实际上是basic_string
模板char
实例化的typedef
名称。然而,不需要关注这些细节。只要像非模板类那样使用string即可。
正则表达式
I/O流
I/O功能在几个头文件中定义:
<fstream>
<iomanip>
<ios>
<iosfwd>
<iostream>
<istream>
<ostream>
<sstream>
<streambuf>
<strstream>
智能指针
C++用智能指针unique_ptr
、shared_ptr
和week_ptr
解决内存管理问题。
shared_ptr
和week_ptr
是线程安全的,都在<memory>
中定义。
异常
C++标准库提供了一个异常的类层次结构,在程序中可以使用这些类,也可以通过继承方式创建自己的异常类型。
异常在以下头文件中定义:
<exception>
<stdexcept>
<system_error>
数学工具
虽然这些类模板化了,可以用于任何类型,但是一般不认为这些类是标准模板库的一部分。
-
<complex>
提供了一个复数类complex
,提供了对实部和虚部的数的操作抽象。 -
<ratio>
有理数运算库,可以精确地表示任何由分子和分母定义的有限有理数。 -
<valarray>
提供了valarray
,和vector
类似,但是对高性能数值应用做了特别的优化,提供了表示矢量切片概念的相关类。通过这些构件,可以构建执行矩阵数学运算的类。不过,没有内建的矩阵类。Boost这样的第三方库提供了矩阵支持。
获取数值极限的标准方式。
<limts>
中的numeric_limits
模板。
cout << "Max int value: " << numeric_limits<int>::max() << endl;
cout << "Min int value: " << numeric_limits<int>::min() << endl;
cout << "Lowest int value: " << numeric_limits<int>::lowest() << endl;
cout << "Max double value: " << numeric_limits<double>::max() << endl;
cout << "Min double value: " << numeric_limits<double>::min() << endl;
cout << "Lowest double value: " << numeric_limits<double>::lowest() << endl;
时间工具
<chrono>
简化了时间相关的操作,特定时间间隔的定时操作和定时相关的操作执行。
随机数
srand()
和rand()
只提供了非常初级的随机数,也无法修改生成随机数的分布。
C++11添加了一个完善的随机数库<random>
,带有随机数引擎、随机数引擎适配器以及随机数分布。
通过<random>
可以生成特定问题域的随机数,例如正态分布、负指数分布。
初始化列表
<initializer_list>
编写参数数目可变的函数。
Pair和Tuple
-
<utility>
定义了pair
模板,可以用于存储两种不同类型的元素。这称为存储异构元素。 -
<tuple>
定义的tuple
是pair
的一种泛化,是一个固定大小的序列,元组的元素可以是异构的。