• 做一个幸福的人,读书,旅行,努力工作,关心身体和心情。
  • 不管有没有人爱,也要努力做一个可爱的人。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。

C++ 参考手册

C/C++ lcq 6个月前 (03-29) 414次浏览 0个评论

备注:内容均来自C++ 参考手册 ,我只是用爬虫爬下来,方便查看。爬虫代码见本文最后。

算法库

算法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。C++ 算法库(Algorithms library)C++ 程序提供了大量可以用来对容器及其它序列进行算法操作的函数。这些组件可以为函数或函数模板,大部份由头文件<algorithm> 提供,一小部份位于<numeric><cstdlib> 中。

在涉及范围操作时,需要注意的是:通常 C++ 中提及的范围(如:[first, last))都是半闭半开区间,即第二个迭代器(或指针,本例中为last)指向的元素是不包含在范围中的。
还可以参考vector与法算 主题,该主题包含大量的代码示例。 

由头文件<algorithm> 定义。

adjacent_find 查找两个相邻(Adjacent)的等价(Identical)元素
all_ofC++11 检测在给定范围中是否所有元素都满足给定的条件
any_ofC++11 检测在给定范围中是否存在元素满足给定条件
count 返回值等价于给定值的元素的个数
count_if 返回值满足给定条件的元素的个数
equal 返回两个范围是否相等
find 返回第一个值等价于给定值的元素
find_end 查找范围A 中与范围B 等价的子范围最后出现的位置
find_first_of 查找范围A 中第一个与范围B 中任一元素等价的元素的位置
find_if 返回第一个值满足给定条件的元素
find_if_notC++11 返回第一个值不满足给定条件的元素
for_each 对范围中的每个元素调用指定函数
mismatch 返回两个范围中第一个元素不等价的位置
none_ofC++11 检测在给定范围中是否不存在元素满足给定的条件
search 在范围A 中查找第一个与范围B 等价的子范围的位置
search_n 在给定范围中查找第一个连续n 个元素都等价于给定值的子范围的位置

由头文件<algorithm> 定义。

copy 将一个范围中的元素拷贝到新的位置处
copy_backward 将一个范围中的元素按逆序拷贝到新的位置处
copy_ifC++11 将一个范围中满足给定条件的元素拷贝到新的位置处
copy_nC++11 拷贝n 个元素到新的位置处
fill 将一个范围的元素赋值为给定值
fill_n 将某个位置开始的n 个元素赋值为给定值
generate 将一个函数的执行结果保存到指定范围的元素中,用于批量赋值范围中的元素
generate_n 将一个函数的执行结果保存到指定位置开始的n 个元素中
iter_swap 交换两个迭代器(Iterator)指向的元素
moveC++11 将一个范围中的元素移动到新的位置处
move_backwardC++11 将一个范围中的元素按逆序移动到新的位置处
random_shuffle 随机打乱指定范围中的元素的位置
remove 将一个范围中值等价于给定值的元素删除
remove_if 将一个范围中值满足给定条件的元素删除
remove_copy 拷贝一个范围的元素,将其中值等价于给定值的元素删除
remove_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素删除
replace 将一个范围中值等价于给定值的元素赋值为新的值
replace_copy 拷贝一个范围的元素,将其中值等价于给定值的元素赋值为新的值
replace_copy_if 拷贝一个范围的元素,将其中值满足给定条件的元素赋值为新的值
replace_if 将一个范围中值满足给定条件的元素赋值为新的值
reverse 反转排序指定范围中的元素
reverse_copy 拷贝指定范围的反转排序结果
rotate 循环移动指定范围中的元素
rotate_copy 拷贝指定范围的循环移动结果
shuffleC++11 用指定的随机数引擎随机打乱指定范围中的元素的位置
swap 交换两个对象的值
swap_ranges 交换两个范围的元素
transform 对指定范围中的每个元素调用某个函数以改变元素的值
unique 删除指定范围中的所有连续重复元素,仅仅留下每组等值元素中的第一个元素。
unique_copy 拷贝指定范围的唯一化(参考上述的unique)结果

由头文件<algorithm> 定义。

is_partitionedC++11 检测某个范围是否按指定谓词(Predicate)划分过
partition 将某个范围划分为两组
partition_copyC++11 拷贝指定范围的划分结果
partition_pointC++11 返回被划分范围的划分点
stable_partition 稳定划分,两组元素各维持相对顺序

由头文件<algorithm> 定义。

is_sortedC++11 检测指定范围是否已排序
is_sorted_untilC++11 返回最大已排序子范围
nth_element 部份排序指定范围中的元素,使得范围按给定位置处的元素划分
partial_sort 部份排序
partial_sort_copy 拷贝部分排序的结果
sort 排序
stable_sort 稳定排序

由头文件<algorithm> 定义。

binary_search 判断范围中是否存在值等价于给定值的元素
equal_range 返回范围中值等于给定值的元素组成的子范围
lower_bound 返回指向范围中第一个值大于或等于给定值的元素的迭代器
upper_bound 返回指向范围中第一个值大于给定值的元素的迭代器

由头文件<algorithm> 定义。

includes 判断一个集合是否是另一个集合的子集
inplace_merge 就绪合并
merge 合并
set_difference 获得两个集合的差集
set_intersection 获得两个集合的交集
set_symmetric_difference 获得两个集合的对称差
set_union 获得两个集合的并集

由头文件<algorithm> 定义。

is_heap 检测给定范围是否满足堆结构
is_heap_untilC++11 检测给定范围中满足堆结构的最大子范围
make_heap 用给定范围构造出一个堆
pop_heap 从一个堆中删除最大的元素
push_heap 向堆中增加一个元素
sort_heap 将满足堆结构的范围排序

由头文件<algorithm> 定义。

is_permutationC++11 判断一个序列是否是另一个序列的一种排序
lexicographical_compare 比较两个序列的字典序
max 返回两个元素中值最大的元素
max_element 返回给定范围中值最大的元素
min 返回两个元素中值最小的元素
min_element 返回给定范围中值最小的元素
minmaxC++11 返回两个元素中值最大及最小的元素
minmax_elementC++11 返回给定范围中值最大及最小的元素
next_permutation 返回给定范围中的元素组成的下一个按字典序的排列
prev_permutation 返回给定范围中的元素组成的上一个按字典序的排列

由头文件<numeric> 定义。

accumulate 累加范围中的元素
adjacent_difference 计算算输出相邻元素的差值
inner_product 计算两个范围的内积
iotaC++11 用顺序递增的值赋值指定范围内的元素
partial_sum 部份求和

由头文件<cstdlib> 定义。

qsort 快速(Quick)排序
bsearch 二分(Binary)查找
C++11

原子操作库(Atomic operations library)为可以用来进行无锁并发编程(Lockless concurrent programming)的细粒度(Fine-grained)原子操作提供了相关组件支持。

当前内容由头文件<atomic> 定义。

atomic 原子类模板
atomic_is_lock_free 检测指定原子类型的操作是否无锁的(Lock-free)
atomic_store 用一个非原子(Non-atomic)参数原子替换(Atomically replace)指定原子对象的值
atomic_store_explicit
atomic_load 原子获取(Atomically obtain)存储在原子对象中的值
atomic_load_explicit
atomic_exchange 用一个非原子(Non-atomic)参数原子替换(Atomically replace)指定原子对象的值,并返回该原子对象之前的值
atomic_exchange_explicit
atomic_compare_exchange_weak 原子比较(Atomically compare)一个原子对象的值与一个非原子参数,如果相等则进行原子交换(Atomic exchange),否则进行原子加载(Atomic load)
atomic_compare_exchange_weak_explicit
atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
atomic_fetch_add 将一个非原子值加到一个原子对象的值上,且返回原子对象之前的值
atomic_fetch_add_explicit
atomic_fetch_sub 从一个原子对象的值中减去一个非原子值,且返回原子对象之前的值
atomic_fetch_sub_explicit
atomic_fetch_and 将一个原子对象的值与一个非原子参数做逻辑与(Logical AND)操作,其结果保存到原子对象中,且返回原子对象之前的值
atomic_fetch_and_explicit
atomic_fetch_or 将一个原子对象的值与一个非原子参数做逻辑或(Logical OR)操作,其结果保存到原子对象中,且返回原子对象之前的值
atomic_fetch_or_explicit
atomic_fetch_xor 将一个原子对象的值与一个非原子参数做逻辑异或(Logical XOR)操作,其结果保存到原子对象中,且返回原子对象之前的值
atomic_fetch_xor_explicit
atomic_flag 无锁(Lock-free)的原子布尔(Boolean)类型
atomic_flag_test_and_set 原子地将一标志设置为true 且返回之前的值
atomic_flag_test_and_set_explicit
atomic_flag_clear 原子地将一标志设置为false
atomic_flag_clear_explicit
atomic_init 默认构造(Default-constructed)的原子对象的非原子初始化(Non-atomic initialization)
ATOMIC_VAR_INIT 静态存储期(Static storage duration)的原子变量的常量初始化(Constant initialization)
ATOMIC_FLAG_INIT 将一个atomic_flag 初始化为false
memory_order 为指定的原子操作附加内存次序限制(Memory ordering constraint)
kill_dependency memory_order_consume 依赖树中删除指定对象
atomic_thread_fence 通用内存依赖次序(Order-dependent)的栅栏同步原语(Fence synchronization primitive)
atomic_signal_fence 线程及执行在同一个线程中的信号量处理例程(Signal handler)之间的栅栏

容器(Container)是一个用来存储一组其它对象的容纳器对象。所有标准容器被实现为类模板,这使得它们在所支持的元素类型上表现出极大的灵活性。

容器可以用来替换大量在编程过程中用到的数据结构:数组(std::arrayC++11、动态数组(std::vector)、队列(std::queue)、双端队列(std::deque)、栈(std::stack)、堆(std::priority_queue)、双向链表(std::list)、正向链表(std::forward_listC++11、树(std::set)、关联数组(std::map)等。

具体内容详见各个容器的介绍。

arrayC++11 <array> 数组类
vector <vector> 向量
deque <deque> 双端队列
list <list> 双向链表
forward_listC++11 <forward_list> 正向链表
set <set> 集合
multiset <set> 多键集合
map <map> 映射表
multimap <map> 多键映射表
stack <stack> LIFO
queue <queue> FIFO 队列
priority_queue <queue> 优先级队列

诊断库(Diagnostics library)提供了用于程序诊断和报错的功能。内容包括:异常相关,程序断言,用来保存错误号的全局变量。

错语处理相关内容一部份位于语言支持库,另一部份位于诊断库,本手册将其全部梳理归纳到诊断库中。

由头文件<exception> 定义的相关内容:

exception 由标准库组件(Standard library component)抛出的异常的基类

捕获及存储异常对象

uncaught_exception 检测异常处理是否正在进行
exception_ptrC++11 用于操作异常对象的共享指针类型
make_exception_ptrC++11 创建一个指向异常对象拷贝的exception_ptr 对象
current_exceptionC++11 捕获当前异常
rethrow_exceptionC++11 再次抛出异常
nested_exceptionC++11 这是一个混合类型(Mixin type),用于捕获及存储当前异常
throw_with_nestedC++11 嵌套当前异常及参数中保存的异常且抛出
rethrow_if_nestedC++11 如果异常嵌套,则再次抛出异常

异常处理时的失败处理

terminate 异常处理失败时将会调用的函数
terminate_handler terminate 调用的函数的类型
get_terminateC++11 获得当前中止处理例程(Terminate handler)
set_terminate 设置当前中止处理例程

违反异常规范的处理

unexpected已弃用 动态异常规范被违反时将会调用的函数
bad_exception 动态异常规范被违反时将会抛出的异常
unexpected_handler已弃用 unexpected 调用的函数的类型
get_unexpectedC++11已弃用 获得当前意外处理例程(Unexpected handler)
set_unexpected已弃用 设置当前意外处理例程

由头文件<stdexcept> 定义的相关内容: 

logic_error 逻辑错误异常
invalid_argument 无效参数异常
domain_error 定义域范围异常
length_error 长度异常
out_of_range 超出范围异常
runtime_error 运行时异常
range_error 范围异常
overflow_error 算述溢出异常
underflow_error 下溢异常

由头文件<cerrno> 定义的相关内容:

详见错误码 主题,该主题包含了大量相关内容。

static_assertionC++11 编译时(Compile-time)断言检测

由头文件<cassert> 定义的相关内容:

assert 当用户指定的条件为假时,将终止程序
C++11

由头文件<system_error> 定义的相关内容:

error_category 错误类型的基类
generic_category 识别一般错误类别
system_category 识别操作系统错误类别
error_condition 保存了一个可移值(Portable)的错误码
errc 对应于所有可移值错误码的枚举值
error_code 保存了一个平台依赖(Platform-dependent)的错误码
system_error 系统错误异常

通用工具库(General utilities library)包含了大量经常用到的实用程序及功能组件。

注意!该库与语言支持库(Language support library)的内容互有重合,本手册将其中部分内容梳理归纳到一个库中,以方便查阅。
详见程序功能组件 主题,该主题包含了大量相关内容。
详见日期与时间功能组件 主题,该主题包含了大量相关内容。

由头文件<bitset> <cstdlib> 定义的相关内容:</cstdlib>

bitset 实现了恒定长度的位数组
详见函数对象 主题,该主题包含了大量相关内容。
pair 实现了二元组
tupleC++11 实现了多元组,这是一个编译期就确定大小(Implements fixed)的容器,可以容纳不同类型的元素
piecewise_constructC++11 这是一个空对象,是piecewise_construct_t 的一个实例,专用于重载pair 的构造函数,使得可以将两个tuple 参数中的成员按正确的顺序(In place)传递给对应的构造函数,即pair 内部构造tuple 对象时不是以另一整个tuple 为参数(拷贝构造),而是将另一个tuple 内所有元素拆分开来再传递进构造函数(Piecewise)
piecewise_construct_tC++11 piecewise_construct 常量的类型,是一个空结构体
integer_sequenceC++14 实现了编译时(Compile-time)的整数序列
swap 交换两个对象的值
exchangeC++14 将一个对象赋值为新的值,并返回原来的值
forwardC++11 传递一个函数参数
moveC++11 获得右值引用(Rvalue reference)
move_if_noexceptC++11 如果移动构造函数(Move constructor)不会抛出异常,则获得右值引用
declvalC++11 该函数模板用于decltype 表达式,可以将任意类型转化成一个引用类型(Reference type),再使用其成员函数以猜测类型,不管该类型是否支持默认构造函数(Default constructor)

由头文件 <functional>​<utility> 定义的相关内容(属于std::rel_ops 名称空间):</functional>

operator!=
operator>
operator<=
operator>=
通过用户自定义的operator==operator< 操作符,自动生成的其它比较操作符
C++11 

hash 哈希(Hash)函数对象
C++14

由头文件 <optional> 定义的相关内容:

optional 该类型的对象的值即可能被初始化过,也可能未被初始化
in_place_t 用于消除可选类型的就地(In-place)构造的歧义的标签类型(Tag type)
in_place in_place_t 类型的对象
nullopt_t 一个空(无成员)类型,作为指明可选类型处在未初始化状态的指示符(Indicator)
nullopt nullopt_t 类型的对象
bad_optional_access 这是一个异常,表明正在访问一个未初始化的可选类型

输入/输出库(Iostream library)是一个面象对象编程的标准库,它提供了使用流(Stream)来进行输入及输出的功能。

流是一个抽象的概念,它代表了一个将要在其上进行输入输出操作的设备。一个流可以从本质上描述成无限长度字符串的输入来源(Source)或输出目标(Destination)

流通常被关联到字符数据的物理来源或目标,比如:磁盘文件、键盘、控制台(Console)等。当从流中获取或写入字符时,这些字符将从对应的物理设备中输入或输出到对应的物理设备。举个例子,在C++ 中,可以使用文件流对象来操作一个文件,在该流上进行的任意输入输出操作将会在物理上影响该文件。

当前库及它的类层次结构被划分到不同的文件中:

<ios><istream><ostream>,<streambuf> 及<iosfwd> 等文件对大部分C++ 程序来说,通常不会被直接包含及使用。它们描述了类层次结构中的基类,将通过库中包含上述基类的继承类的头文件自动包含到程序中。

<iostream> 定义了用来与标准输入输出进行通迅的对象(包括std::cinstd::cout)。

<fstream> 定义了文件流类相关(如类模板std::basic_ifstream 或类std::ofstream)及与这些类一起使用的内部缓存对象(std::basic_filebuf)。

<sstream> 定义了一些用来操作std::string 对象的类,这些类将std::string 对象当成流来使用。

<iomanip> 声明了一些与提取及插入操作符一起使用来修改内部标志(Internal flag)及格式选项(Formatting option)的标准操控符(Standard manipulatormanipulator 也可译作操作符、操控器)。

ios_base <ios> 用于流的基类
ios <ios><iosfwd> 用于流的基类(类型依赖(Type-dependent)的组件)
istream <istream><iosfwd> 输入流(Input stream)
ostream <ostream><iosfwd> 输出流(Output stream)
iostream <iostream><iosfwd>​ 输入、输出流(Input/output stream)
ifstream <fstream><iosfwd>​ 输入文件流(Input file stream)
ofstream <fstream><iosfwd> 输出文件流(Output file stream)
fstream <fstream><iosfwd>​ 输入、输出文件流(Input/output file stream)
istringstream <sstream><iosfwd>​ 输入字符串流(Input string stream)
ostringstream <sstream><iosfwd>​ 输出字符串流(Output string stream)
stringstream <sstream><iosfwd> 输入/输出字符串流(Input/output string stream)
streambuf <streambuf><iosfwd>​​ 用于流的缓存基类
filebuf <fstream><iosfwd>​​ 文件流缓存
stringbuf <sstream><iosfwd>​​​ 字符串流缓存

上述类(除了ios_base)分别是以下类模板的实例。

basic_ios <ios> 用于流的基类模板(类型依赖(Type-dependent)的组件)
basic_istream <istream> 输入流类模板(Input stream)
basic_ostream <ostream> 输出流类模板(Output stream)
basic_iostream <iostream> 输入、输出流类模板(Input/output stream)
basic_ifstream <fstream> 输入文件流类模板(Input file stream)
basic_ofstream <fstream> 输出文件流类模板(Output file stream)
basic_fstream <fstream> 输入、输出文件流类模板(Input/output file stream)
basic_istringstream <sstream> 输入字符串流类模板(Input string stream)
basic_ostringstream <sstream> 输出字符串流类模板(Output string stream)
basic_stringstream <sstream> 输入/输出字符串流类模板(Input/output string stream)
basic_streambuf <streambuf> 用于流的缓存基类模板
basic_filebuf <fstream> 文件流缓存类模板
basic_stringbuf <sstream> 字符串流缓存类模板
cin 标准输入流(窄字符版)
cout 标准输出流(窄字符版)
cerr 用于输出错误信息的标准输出流(窄字符版)
clog 用于输出日志信息的标准输出流(窄字符版)
wcin 标准输入流(宽字符版)
wcout 标准输出流(宽字符版)
wcerr 用于输出错误信息的标准输出流(宽字符版)
wclog 用于输出日志信息的标准输出流(宽字符版)
fpos 用于表示流位置的类模板
streamoff 用于表示流偏移的类型
streampos 用于表示流位置的类型
streamsize 用于表示流大小的类型
boolalpha 字符化bool
dec 使用十进制计数
endl 插入新行(Newline)及刷新缓冲区数据(Flush)
ends 插入空(Null)字符
fixed 使用定点数(Fixed floating-point)表示法
flush 刷新流缓存
hex 使用十六进制计数
internal 在内部位置插入所需数量的填充字符以调整输出长度
left 使输出居左,即在输出末尾插入填充字符以调整输出长度
noboolalpha 取消bool 值的字符化设置
noshowbase 不显示数值基址前缀。
noshowpoint 取消显示小数点
noshowpos 取消显示正号(+)
noskipws 取消跳过空白字符
nounitbuf 取消在每次插入操作(Insertion)后强制刷新缓存(Flush)
nouppercase 取消生成大写字母(Upper case letter)
oct 使用八进制计数
resetiosflags 重设格式标志
right 使输出居右,即在输出开头插入填充字符以调整输出长度
scientific 使用科学浮点数(Scientific floating-point)表示法
setbase 设置数值表示的基数
setfill 设置填充字符
setiosflags 设置格式标志
setprecision 设置浮点精度
setw 设置输出字段的长度
showbase 显示数值基址前缀
showpoint 显示小数点
showpos 显示正号(+)
skipws 跳过空白字符
unitbuf 每次插入操作(Insertion)后强制刷新缓存(Flush)
uppercase 生成大写字母(Upper case letter)
ws 提取(且丢弃)空白字符
get_moneyC++11 解析一个货币值
put_moneyC++11 格式化及输出一个货币值
get_timeC++11 解析指定格式的时间/日期值
put_timeC++11 按指定的格式格式化及输出一个时间/日期值

由头文件<ios> 定义的相关内容: 

io_errcC++11 I/O 流错误码(Error code)
iostream_categoryC++11 标记iostream 错误类别

迭代器提供对集合(容器)元素的操作能力。迭代器提供的基本操作就是访问和遍历,这构成了迭代器的需求。在C++中,迭代器的需求称为Iterator需求:

  • *r成立
  • ++r成立

一共支持五种迭代器: 输入迭代器(InputIterator)、输出迭代器(OutputIterator)、正向迭代器(ForwardIterator)、双向迭代器(BidirectionalIterator)、随机访问迭代器(RandomAccessIterator)

别类 属性 有效表达式
所有类别 支持拷贝构造(Copy-constructible)、拷贝赋值(Copy-assignable)及析构(Destructible) X b(a);
​b = a;
可以递增(Incremented) ++a
a++
随机访问 双向 正向 输入 支持等式(Equality)比较或不等式(Inequality)比较 a == b
a != b
可以作为右值(Rvalue)而被解引用(Dereferenced) *a
a->m
输出 可以作为左值(Lvalue)而被解引用 *a = t
*a++ = t
  支持默认构造函数(Default-constructible) X a;
X();
多道(Multi-pass):解引用(Dereference)及递增(Increment)都不会影响解引用性(Dereferenceability) { b=a; *a++; *b; }
  可以递减(Decremented) –a
a–
*a–
  支持算述(Arithmetic)操作符函数operator+operator- a + n
n + a
a – n
a – b
支持两个迭代器间的不等式(Inequality)比较 a < b
a > b
a <= b
a >= b
支持赋值(Assignment)操作符operator+=operator-= a += n
a -= n
支持偏移解引用操作符operator[] a[n]
iterator_traits 为查询迭代器信息提供了统一的接口(Interface)
input_iterator_tag 这是一个空类,表明迭代器类型为输入迭代器,是一个标签类型(Tag type)
output_iterator_tag 这是一个空类,表明迭代器类型为输出迭代器,是一个标签类型
forward_iterator_tag 这是一个空类,表明迭代器类型为正向迭代器,是一个标签类型
bidirectional_iterator_tag 这是一个空类,表明迭代器类型为双向迭代器,是一个标签类型
random_access_iterator_tag 这是一个空类,表明迭代器类型为随机访问迭代器,是一个标签类型
iterator 迭代器类型的基类
reverse_iterator 用于逆序遍历的迭代器适配器(Adaptor)
move_iteratorC++11 用于解引用(Dereference)到一个右值引用(Rvalue reference)的迭代器适配器
make_move_iterator 创建一个move_iterator
back_insert_iterator 用于在容器末尾插入元素的迭代器适配器
back_inserter 创建一个back_insert
front_insert_iterator 用于在容器开头插入元素的迭代器适配器
front_inserter 创建一个front_insert_iterator
insert_iterator 用于在容器任意位置插入元素的迭代器适配器
inserter 创建一个insert_iterator
istream_iterator 用于从 basic_istream 中读取数据的输入(Input)迭代器
ostream_iterator 用于写入数据到basic_ostream 的输出(Output)迭代器
istreambuf_iterator 用于从basic_streambuf 中读取数据的输入迭代器
ostreambuf_iterator 用于写入数据到basic_streambuf 的输出迭代器
advance 以指定距离向前移动(Advance)一个迭代器
distance 返回两个迭代器之间的距离
nextC++11 递增一个迭代器
prevC++11 递减一个迭代器
beginC++11 返回指向容器起始位置的迭代器(iterator)
cbeginC++14 返回指向容器起始位置的常迭代器(const_iterator)
endC++11 返回指向容器末尾位置的迭代器
cendC++14 返回指向容器末尾位置的常迭代器
rbeginC++14 返回指向容器逆序起始位置的逆序迭代器(reverse_iterator)
crbeginC++14 返回指向容器逆序起始位置的常逆序迭代器(const_reverse_iterator)
rendC++14 返回指向容器逆序末尾位置的逆序迭代器
crendC++14 返回指向容器逆序末尾位置的常逆序迭代器

语言支持库(Language support library)提供了对语言基础特征及常用语法的支持。

这部份内容通常被用于标准库的其他地方或是具体的应用程序中,比如:在整个标准库中都会用到的常用类型定义,预定义类型的特征信息,对启动或终止C++ 程序的函数的支持,对动态内存管理的支持,对动态类型识别的支持,对异常处理的支持,对初始化列表的支持,以及其它运行时的支持。

注意!该库与通用工具库(General utilities library)的内容互有重合,本手册将其中部分内容梳理归纳到一个库中,以方便查阅。
详见类型支持 主题,该主题包含了大量相关内容。
详见动态内存管理 主题,该主题包含了大量相关内容。
错语处理相关内容一部份位于语言支持库,另一部份位于诊断库,本手册将其全部梳理归纳到诊断库中。

详见诊断库主题,该主题包含了大量相关内容。

C++11

由头文件<initializer_list> 定义的相关内容:

initializer_list 允许使用初始化列表语义来初始化非C 型数据(non POD)
详见可变参数函数 主题,该主题包含了大量相关内容。
本地化库(Localization library)包含了对字符分类(Character classification),字符串排序规则(String collation),数值(Numeric)、货币(Monetary)及日期或时间的格式化(Formatting)及解析(Parsing),报文检索(Message retrieval)等的国际化支持(Internationalization support)。本地化信息集的设置会影响输入/输出流库(Input/output library),正则表达式库(Regular expressions library)及其它标准库组件的行为。
locale 封装了文件差异的抽象策略的集合
use_facet 从一个本地化中获得一个策略
has_facet 检测本地化是否实现了指定策略
isspace(std::locale) 通过一个本地信息集检测一个字符是否是空格字符
isblank(std::locale)C++11 通过一个本地信息集检测一个字符是否是空档字符
iscntrl(std::locale) 通过一个本地信息集检测一个字符是否是控制(Control)字符
isupper(std::locale) 通过一个本地信息集检测一个字符是否是大写字母
islower(std::locale) 通过一个本地信息集检测一个字符是否是小写字母
isalpha(std::locale) 通过一个本地信息集检测一个字符是否是字母类型的(Alphabetic)
isdigit(std::locale) 通过一个本地信息集检测一个字符是否是数字类型的
ispunct(std::locale) 通过一个本地信息集检测一个字符是否是标点符号字符
isxdigit(std::locale)  通过一个本地信息集检测一个字符是否是十六进制(Hexadecimal)字符
isalnum(std::locale) 通过一个本地信息集检测一个字符是否是数字或字母类型的(Alphanumeric)
isprint(std::locale) 通过一个本地信息集检测一个字符是否是可打印字符
isgraph(std::locale) 通过一个本地信息集检测一个字符是否是图型(Graphical)字符
toupper(std::locale) 通过一个本地化信息集将一字符转化对应的大写字母
tolower(std::locale) 通过一个本地化信息集将一字符转化对应的小写字母
wstring_convertC++11 在宽字符(Wide)字符串与单字节(Byte)字符字符串之间进行转化
wbuffer_convertC++11 在宽字符流缓存与单字节字符流缓存之间进行转化
ctype_base 定义了字符分类(Classification)类别
codecvt_base 定义了字符转化(Character conversion)错误
messages_base 定义了报文目录(Messages catalog)类型
time_base 定义了日期格式(Date format)常量
money_base 定义了货币格式模式(Monetary formatting pattern)
ctype 定义了字符分类表(Character classification table)
codecvt 在字符编码(Character encoding)间转化,包括UTF-8UTF-16UTF-32
collate 定义了字典比较(Lexicographical comparison)及字符串哈希(Hash)
messages 实现了报文目录(Message catalog)的字符串检索(Retrieval)
time_get 从一个输入字符序列中解析出时间/日期值到tm 对象中
time_put 将 tm 对象中的内容格式化为字符序列,然后用作输出
num_get 从一个输入字符序列中解析出数值(numeric)
num_put 将数值格式化为字符序列,然后用作输出
numpunct 定义了数值标点规则(Numeric punctuation rule)
money_get 从一个输入字符序列中解析且构造出货币(Monetary)
money_put 将货币值格式化为字符序列,然后用作输出
moneypunct 定义了用于money_getmoney_put 的货币格式参数

ctype_byname 代表了由系统提供(System-supplied)的指定名字(Named)的本地化信息集(Locale)中的ctype 策略
codecvt_byname 代表了由系统提供的指定名字的本地化信息集中的codecvt 策略
messages_byname 代表了由系统提供的指定名字的本地化信息集中的messages 策略
collate_byname 代表了由系统提供的指定名字的本地化信息集中的collate 策略
time_get_byname 代表了由系统提供的指定名字的本地化信息集中的time_get 策略
time_put_byname 代表了由系统提供的指定名字的本地化信息集中的time_put 策略
numpunct_byname 代表了由系统提供的指定名字的本地化信息集中的numpunct 策略
moneypunct_byname 代表了由系统提供的指定名字的本地化信息集中的moneypunct 策略
codecvt_utf8C++11 UTF-8UCS2/UCS4 编码格式间进行转化
codecvt_utf16C++11 UTF-16UCS2/UCS4 编码格式间进行转化
codecvt_utf8_utf16C++11 UTF-8UTF-16 编码格式间进行转化
codecvt_modeC++11 用于选择标准编码转化策略的标签类型(Tag type)
setlocale 获取或设置当前C 本地化信息集
LC_ALL 本地化类别
LC_COLLATE
LC_CTYPE
LC_MONETARY
LC_NUMERIC
LC_TIME
localeconv 查询当前本地化信息集(Locale)中的数值(Numeric)及货币(Monetary)的详细信息
lconv localeconv 返回的格式化信息
数值库(Numerics library包含大量常用的数学函数及相关类型,数值数组及随机数生成相关也是属于该库的内容。
暂无。

详见常用数学函数 主题,该主题包含了大量相关内容。

由头文件<numeric> 定义。 

iotaC++11 将顺序递增(Sequentially increasing)的值填充到指定范围[first,last) 的元素中
accumulate 累加(Sums up)指定范围的元素
inner_product 计算两个范围的内积(Inner product)
adjacent_difference 计算范围中相邻元素的差(Difference)
partial_sum 计算范围中的元素的部分和

详见浮点数环境 主题,该主题包含了大量相关内容。

详见复数(Complex)相关 主题,该主题包含了大量相关内容。

详见伪随机数生成 主题,该主题包含了大量相关内容。

详见数值数组 主题,该主题包含了大量相关内容。

详见编译时的有理数运算 主题,该主题包含了大量相关内容。
C++11

正则表达式(regular expressions)是一种用于在字符串内进行模式匹配的最小语言。除了标准正则表达式语法,标准库还提供了用于支持与正则表达式有关的算法(Algorithms)、迭代器(Iterators)、异常(Exceptions)、类型特征(Type traits)的工具类。

当前内容由头文件<regex> 定义。

排序节点(Collating element)

在当前本地化环境下,一个或多个字符的序列被定序为就好像是一个字符,这样的序列被称为一个排序节点。

有限状态机(Finite state machine)

一个被用来代表正则表达式的未特别指定的数据结构,可以高效地匹配所需获得的正则表达式。

格式说明符(Format specifier)

被正则表达式匹配结果所替换的由一个或多个字符组成的序列。

匹配的(Matched)

当由一个或多个字符组成的序列跟由一正则表达式所代表的模式定义的字符序列等价,则称该序列与正则表达式是“匹配的”。

原始等价分类(Primary equivalence class)

一个排序键权重只依赖于其形状,而跟是否重读、大小写或其它本地化特别定义的修饰无关,则称这个有相同主排序键的一个或多个字符的集合为“原始等价分类”。

正则表达式(Regular expression)

一个从字符串集合中查找特定字符串所用到的模式。

子表达式(Sub-expression)

一个正则表达式中由圆括号标记的字符子集被称为子表达式。

暂无。
basic_regex 正则表达式对象
sub_match 标识子表达式(Sub-expression)所匹配的字符序列
match_results 标志一个正则表达式的匹配结果,包含所有的子表达式匹配结果
regex_match 尝试将一个正则表达式匹配一整个字符序列
regex_search 尝试将一个正则表达式匹配字符序列的任意部份
regex_replace 用格化式过的替换文本(Formatted replacement text)替换正则表达式所匹配的序列
regex_iterator 在一个字符序列中迭代所有正则匹配结果
regex_token_iterator 子匹配项的迭代器类
regex_error 正则表达式库产生错误时所抛出的异常
regex_traits 提供了正则表达式库所需的字符类型的元信息(Metainformation)
syntax_option_type 用于控制正则表达式行为(Regex behavior)的通用选项
match_flag_type 附加的针对匹配的选项
error_type 描述了匹配错误的类型
暂无

C++ 字符串库包含对两种通用字符串类型的支持:

std::basic_string :一个字符串类模板,被设计用来操作任意字符类型的字符串。
以空字符结束的(Null-terminated)字符串:以指定的空(Null)字符结束的字符数组。

类模板std::basic_string 归纳了一个字符序列是如何被存储及操作的。字符创建(Creation)、操作(Manipulation)及销毁(Destruction)全部是通过一系列简洁且方便的类方法及相关函数来处理的。

字符串库使用好几个常用的字符类型对std::basic_string 类模板进行了特例化:

std::string std::basic_string<char>
std::wstring std::basic_string<wchar_t>
std::u16stringC++11 std::basic_string<char16_t>
std::u32stringC++11 std::basic_string<char32_t>

以空字符结束的(Null-terminated)字符串是指以指定的空(Null)字符结束的字符数组。C++ 提供了大量用来创建、检验及修改以空字符结束的字符串的函数。

通常如下有三种以空字符结束的字符串:

char_traits 是由字符串库提供的字符特性类模板,该类模板为描述字符属性及操作字符提供了统一的接口。

当前库为char_traits 类模板提供了如下的特例化:

template<> class char_traits<char>
template<> class char_traits<wchar_t>
template<> class char_traits<char16_t>
template<> class char_traits<char32_t>
std::stoiC++11 将字符串转化成带符号(Signed)整数
std::stolC++11 将字符串转化成带符号整数
std::stollC++11 将字符串转化成带符号整数
std::stoulC++11 将字符串转化成无符号(Unsigned)整数
std::stoullC++11 将字符串转化成无符号整数
std::stofC++11 将字符串转化成浮点数
std::stodC++11 将字符串转化成浮点数
std::stoldC++11 将字符串转化成浮点数
std::to_stringC++11 将一个整数或浮点数转化成字符串
std::to_wstringC++11 将一个整数或浮点数转化成宽字符串
std::hash<std::string>C++11 字符串的啥希(Hash)支持
std::hash<std::u16string>C++11
std::hash<std::u32string>C++11
std::hash<std::wstring>C++11
C++11

由头文件<thread>  定义的相关内容: 

thread 用于管理线程

管理当前线程的函数

yield 暗示执行体(如操作系统)重新安排(Reschedule)线程的执行,即主动让出执行权
get_id 返回当前线程的线程标识号(Thread id)
sleep_for 使当前线程停止运行,直到过去一段指定的时间(Time duration)
sleep_until 使当前线程停止运行,直到到达一个指定的时间点(Time point)

由头文件<mutex>  定义的相关内容:

mutex 提供了基本的互斥机制
timed_mutex 提供了使用有超时限制(Timeout)的锁的互斥机制
recursive_mutex 提供了可被同一线程递归锁定的互斥机制
recursive_timed_mutex 提供了可被同一线程递归锁定且使用有超时限制的锁的互斥机制
shared_mutexC++14 提供了共享互斥机制

常用锁操作

lock_guard 实现了严格的基于范围(Scope-based)的互斥所有权(Mutex ownership)的封装
unique_lock 实现了可移动(Movable)的互斥所有权的封装
shared_lockC++14 实现了可移动的共享互斥所有权的封装
defer_lock_t 用于指明锁策略(Locking strategy)的标签类型(Tag type)
try_to_lock_t
adopt_lock_t
defer_lock 分别是defer_lock_ttry_to_lock_tadopt_lock_t 等类型的对象
try_to_lock
adopt_lock

常用锁算法

try_lock 尝试获得互斥锁的所有权
lock 加锁指定的互斥锁,如果不能则阻塞(Block)

单次调用

once_flag 用于确保call_once 仅请求调用指定函数一次的辅助对象
call_once 仅请求调用指定函数一次,即使被多条线程调用

由头文件<condition_variable>  定义的相关内容:

condition_variable 提供了与unique_lock 关联的条件变量
condition_variable_any 提供了与任意锁类型关联的条件变量
notify_all_at_thread_exit 提供了一种机制来通知其它所有线程指定线程已经被完全结束
cv_status 列举了定时等待(Timed wait)指定条件变量可能返回的结果

由头文件<future> 定义的相关内容:

promise 保存一个值用于异步获取(Asynchronous retrieval)
packaged_task 打包一个函数来存储它的返回值,以用于异步获取
future 等待一个会被异步设置的值
shared_future 等待一个会被异步设置的值,该值可能被其它future 等待所使用
async 异步运行(可能会运行在一个新的线程中)一个函数,且返回一个将会保存结果的future 对象
launch 指定async 的开始策略(Launch policy)
future_status 指定在futureshared_future 上进行的定时等待(Timed wait)所返回的状态

future 模式错误

future_error futurepromise 可能会抛出的异常
future_category 标识future 错误类别(Error category)
future_errc 标识future 错误码(Error code)

爬网页代码

 


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ 参考手册
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址