供的异常类,用new分配一块内存时,大小超出了实现所定义的大小限制时,
会抛出该异常。
bad_weak_ptr:定义在头文件
,c++11开始支持。当由std::weak_ptr
转换为std::share_ptr
,而std::weak_ptr
所指向的对象已经删除了,会抛出该异常。
bad_function_call:定义在头文件
,c++11开始支持。当函数对象为空对象时,调用该对象,由
std::function::operator()
抛出该异常。
Callable
Callable类型是可以触发某些操作的类型,定义在std::function, std::bind, std::thread::thread
,一个Callable对象可以是
一个函数对象,指向函数的指针,函数的引用,指向成员函数的指针,或者是指向数据成员的指针。
Utilities
template
struct pair;
(
)
template
class tuple;
(
)
template
> class unique_ptr;
(
)
template
class unique_ptr
(
)
template
class shared_ptr;
(
)
template
class weak_ptr;
(
)
注意在某一时刻只能有一组shared pointers拥有某个对象,也就是说不能改对象构造多个shared_ptr对象,
只能用该对象的shared_ptr对象去构造新的shared_ptr对象。
template
class enable_shared_from_this;
(
)
template
struct default_delete;
(
)
template
struct default_delete
;
(
)
基本数据类型的最小大小:char 1, short int 2, int 2, long int 4, long long int 8, float 4, double 8, long double 8;
template
class numeric_limits;
(
)
注意c++11新增的头文件
提供的编译时类型信息。
template
typename std::add_rvalue_reference
::type declval()
引用包装器:reference_wrapper (
)
函数包装器:function(
)
中提供了很多只读序列的操作,可写序列的操作,分割操作,排序操作,二分查找操作,集合操作,堆操作,求最大最小值操作。
注意,remove并没有实际删除元素,只是将迭代器的指针向前移动来跳过remove的元素,所以原容器的大小并没改变,remove将返回新的尾部迭代器。
c++11提供了编译时的分数算术运算
。
c++11提供了新的时钟标准库
The Standard Template Library
容器(containers) 迭代器(iterators) 算法(algortithms)
STL将数据与对数据的操作相分离,数据由容器来管理,操作由算法来完成,通过迭代器来连接算法与容器。
STL容器分类:
序列容器:array,vector,deque,list,forward_list。通常由数组与链表实现。
关联容器:set, multiset, map, multimap。通常由平衡二叉树实现。
无序关联容器:unordered_set, unordered_multiset, unordered_map, unordered_multimap。通常由哈希表实现。
容器适配器:stack,queue,priority_queue。
STL迭代器分类:
ForwardIterator, BidirectionalIterator, RandomAccessIterator
InputIterator(只能前向迭代), OutputIterator(只能前向迭代)
迭代器分类
|
功能
|
提供该迭代器的类、函数或数据结构
|
OutputIterator
|
前向写
|
ostream,inserter
|
InputIterator
|
一次前向读
|
istream
|
ForwardIterator
|
前向读
|
forward_list, unordered associative containers
|
BidirectionalIterator
|
双向读
|
list,associative containers
|
RandomAccessIterator
|
随机读
|
array,vector,deque,string,C-style array
|
流迭代器:
istream_iterator
ostream_iterator
istreambuf_iterator
ostreambuf_iterator
迭代器适配器:
类
reverse_iterator 逆序遍历
move_iterator 解引用转换右值引用
insert_iterator 插入到容器
back_insert_iterator 插入到容器尾
front_insert_iterator 插入到容器头
函数
make_reverse_iterator 创建一个reverse_iterator
make_move_iterator 创建一个move_iterator
front_inserter 创建一个front_insert_iterator
back_inserter 创建一个back_insert_iterator
inserter 创建一个insert_iterator
作为容器的元素必须满足以下三个要素:
该元素可拷贝或移动;该元素可赋值;该元素能够被销毁;
注意c++标准模板库仅支持值语义。
注意vector重分配空间后,对原来vector中的元素的引用,指针,和迭代器将会无效。
注意vector特化了一个vector
版本,更加节省空间。
deque的内部实现,可能是使用了多个内存块,一些用于前向增长,一些用于逆向增长。
注意list的splice成员函数,是在指定的位置的前面插入元素的。
注意自定义关联容器的排序规则时,需要满足严格弱序化(需要区分小于还是等于), 即:
- 反对称性,若果x < y,那么y < x;
- 传递性,若果x < y且y < z, 那么x < z;
- 反自反性,x < x的比较结果是false;
- 相等的传递性,如果!(a < b) && !(b < a)是true, 且!( b < c) && !(c < b)是true,那么!(a < c) && !(c < a)是true;
函数对象,即在类中重载了operator ()
输入输出流:
istream: 输入流读数据,类模板basic_istream的实例化
ostream: 输出流写数据,类模板basic_ostream的实例化
全局流对象:cin,cout,cerr,clog
流继承关系,如下图
其它的功能,在遇到的时候再参考帮助文档与其他资料学习。
参考
1. 《The C++ Standard Library 2nd edition》,Nicolai M.Josuttis.
2. cppreference