一、一般介绍
Vector
|
Deque
|
List
|
Set
|
MultiSet
|
Map
|
MultiMap
|
|
内部结构
|
dynamic array
|
array of arrays
|
double linked list
|
binary tree
|
binary tree
|
binary tree
|
binary tree
|
随机存取
|
Yes
|
Yes
|
No
|
No
|
No
|
Yes(key)
|
No
|
搜索速度
|
慢
|
慢
|
很慢
|
快
|
快
|
快
|
快
|
快速插入移除
|
尾部
|
首尾
|
任何位置
|
--
|
--
|
--
|
--
|
vector<T>::iterator it;list<T>::iterator it;deque<T>::iterator it;
迭代器类别
|
说明
|
输入
|
从容器中读取元素。输入迭代器只能一次读入一个元素向前移动,
输入迭代器只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列
|
输出
|
向容器中写入元素。输出迭代器只能一次一个元素向前移动。
输出迭代器只支持一遍算法,统一输出迭代器不能两次遍历一个序列
|
正向
|
组合输入迭代器和输出迭代器的功能,并保留在容器中的位置
|
双向
|
组合正向迭代器和逆向迭代器的功能,支持多遍算法
|
随机访问
|
组合双向迭代器的功能与直接访问容器中任何元素的功能,
即可向前向后跳过任意个元素
|
迭代器操作
|
说明
|
所有迭代器
|
|
p++
|
后置自增迭代器
|
++p
|
前置自增迭代器
|
输入迭代器
|
|
*p
|
复引用迭代器,作为右值
|
p=p1
|
将一个迭代器赋给另一个迭代器
|
p==p1
|
比较迭代器的相等性
|
p!=p1
|
比较迭代器的不等性
|
输出迭代器
|
|
*p
|
复引用迭代器,作为左值
|
p=p1
|
将一个迭代器赋给另一个迭代器
|
正向迭代器
|
提供输入输出迭代器的所有功能
|
双向迭代器
|
|
--p
|
前置自减迭代器
|
p--
|
后置自减迭代器
|
随机迭代器
|
|
p+=i
|
将迭代器递增i位
|
p-=i
|
将迭代器递减i位
|
p+i
|
在p位加i位后的迭代器
|
p-i
|
在p位减i位后的迭代器
|
p
|
返回p位元素偏离i位的元素引用
|
p<p1
|
如果迭代器p的位置在p1前,返回true,否则返回false
|
p<=p1
|
p的位置在p1的前面或同一位置时返回true,否则返回false
|
p>p1
|
如果迭代器p的位置在p1后,返回true,否则返回false
|
p>=p1
|
p的位置在p1的后面或同一位置时返回true,否则返回false
|
容器
|
支持的迭代器类别
|
说明
|
vector
|
随机访问
|
一种随机访问的数组类型,提供了对数组元素进行快速随机访问以及在序列尾部进行快速的插入和删除操作的功能。可以再需要的时候修改其自身的大小
|
deque
|
随机访问
|
一种随机访问的数组类型,提供了序列两端快速进行插入和删除操作的功能。可以再需要的时候修改其自身的大小
|
list
|
双向
|
一种不支持随机访问的数组类型,插入和删除所花费的时间是固定的,与位置无关。
|
set
|
双向
|
一种随机存取的容器,其关键字和数据元素是同一个值。所有元素都必须具有惟一值。
|
multiset
|
双向
|
一种随机存取的容器,其关键字和数据元素是同一个值。可以包含重复的元素。
|
map
|
双向
|
一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个特定的关键字只能与一个元素关联。
|
multimap
|
双向
|
一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个关键字可以与多个数据元素关联。
|
stack
|
不支持
|
适配器容器类型,用vector,deque或list对象创建了一个先进后出容器
|
queue
|
不支持
|
适配器容器类型,用deque或list对象创建了一个先进先出容器
|
priority_queue
|
不支持
|
适配器容器类型,用vector或deque对象创建了一个排序队列
|
#include <stack>template < typename T, typename Container=deque > class stack;
bool stack<T>::empty() //判断堆栈是否为空void stack<T>::pop() //弹出栈顶数据stack<T>::push(T x) //压入一个数据stack<T>::size_type stack<T>::size() //返回堆栈长度T stack<T>::top() //得到栈顶数据
stack<int> intDequeStack; stack<int,vector<int>> intVectorStack; stack<int,list<int>> intListStack;
#include <queue>template<typename T, typename Container = deque<T> > class queue;
queue<T>::push(T x)void queue<T>::pop()T queue<T>::back()T queue<T>::front()queue<T>::size_type queue<T>::size()bool queue<T>::empty()
queue<int> intDequeQueue; queue<int,list<int>> intListQueue;
#include <queue>template <typename T, typename Container = vector<T>, typename Compare = less<T> > class priority_queue;
priority_queue<T>::push(T x)void priority_queue<T>::pop()T priority_queue<T>::top()priority_queue<T>::size_type priority_queue<T>::size()boolpriority_queue<T>::empty()
priority_queue< int, vector<int>, greater<int> >priority_queue< int, list<int>, greater<int> >
priority_queue<int> qi;
priority_queue<int, vector<int>, greater<int> >qi2;
struct node { friend bool operator< (node n1, node n2) { return n1.priority < n2.priority; } int priority; int value; }; priority_queue<node> qn;
原文:https://www.cnblogs.com/al-fajr/p/11285579.html