C++ 原先的标准模板库容器包括:
deque, list, queue, priority_queuem stack, vector, map, multimap, set, multiset, bitset
C++11将bitset从容器分类移去了单独分类,并且添加了:
unordered_map, unordered_multimap, unordered_set, unordered_multiset
标准模板库特性:
表达式 | 返回值 | 描述 |
---|---|---|
X::iterator | iterator | 满足前向迭代器要求的任何迭代器类别 |
X::value_type | T | T类型 |
X u; | 创建一个空的容器u | |
X(); | 创建一个空的无名容器 | |
X u(a); | 复制构造函数传递条件:u==a | |
X u==a | 同上 | |
r=a | X& | 复制赋值传递条件:r==a |
a.begin() | ||
a.end() | 返回结尾后一个迭代器 | |
a.size | 返回a.end()-a,begin() | |
a.swap(b) | void | 互换a和b |
a==b | bool | |
a!=b | bool | return !(a==b) |
C++11里将复制构造函数的操作改为了移动
并且添加了a.cbegin()和a.cend()两个函数,返回常量迭代器
对于序列:dequeue,list,priority_queue,stack,vector,支持以下特性:
注意:p,q,i,j是迭代器,n是整型
表达式 | 返回值 | 描述 |
---|---|---|
X a(n,t) | 声明一个序列a,有n个值为t的元素 | |
X(n,t) | 从创建一个无名的序列有n个值为t的元素 | |
X a(i,j) | 声明一个序列a,初始化范围[i,j) | |
X(i,j) | 创建一个无名序列,初始化范围[i,j) | |
a.insert(p,t) | iterator | 在p前插入t的拷贝 |
a.insert(p,n,t) | void | 在p前插入n个t的拷贝 |
a.insert(p,i,j) | void | 在p前插入[i,j)元素的拷贝 |
a.erase( p ) | iterator | 移除p元素 |
a.erase(p,q) | iterator | 移除[p,q)元素 |
a.clear() | void | erase(begin(),end()) |
另外有
表达式 | 返回值 | 描述 | 容器 |
---|---|---|---|
a.front() | T& | vector,list,deque | |
a.back() | T& | vector,list,deque | |
a.push_front(t) | void | 在头部插入t | list,deque |
a.push_back(t) | void | 在尾部插入t | vector,list,deque |
a.pop_front(t) | void | 擦除头部的值 | list,deque |
a.pop_back() | void | 擦除尾部的值 | vector,list,deque |
a[n] | T& | *(a.begin()+n) | vector,deque |
a. at(n) | T& | 同a[n],但a. at(n)会做越界检查 | vector,deque |
-
vector:代表向量array
有两个类函数:rbegin(),rend(),返回反向的第一个迭代器和反向的最后一个迭代器之后的值 -
deque:代表双向队列
-
list:双向链表
双向链表的成员函数:
表达式 | 描述 |
---|---|
void merge(list<T,Alloc>& x) | 将列表X与调用列表合并。两个列表都必须排序,合并后x清空,O(N) |
void remove(const T & val) | 从列表中删除val的所有实例,O(N) |
void sort() | 以<操作符进行排序,O(NlogN) |
void splice(iterator pos, list<T, Alloc> x) | 将链表x插入到pos之前,x清空,O(1) |
void unique() | 移除连续的相等元素 |
- forward_list(C++11):单链表,每个元素只连接下一个元素
- queue
表达式 | 描述 |
---|---|
bool empty() const | 判断队列是否为空 |
size_type size() const | 返回队列中的元素数 |
T& front() | 返回队列头部元素的引用 |
T& back() | 返回队列尾部元素的引用 |
void push(const T& x) | 在队列尾部插入x |
void pop() | 移除队列头部的元素 |
- priority_queue:支持与queue同样的操作,最大值会被移到队列头部,潜在的缺省类是vector
- stack
表达式 | 描述 |
---|---|
bool empty() const | 判断栈是否为空 |
size_type size() const | 返回栈中的元素数 |
T& top() | 返回栈顶部元素的引用 |
void push(const T& x) | 在栈顶部插入x |
void pop() | 移除栈顶部的元素 |
- array:定义在array头文件里,有固定的size,没有push_back和insert操作
四个联合容器:
- set
- multiset
- map