vector
- 数组的一种表示
- 强调数据的快速随机访问
- 提供了自动内存管理功能,可以动态改变vector对象的长度
- 提供对元素的随机访问
- 尾部添加/删除元素时间固定,头部或中间插入时间为线性复杂度
- 有反转容器,例如下面代码,显示的内容则是相互反序
for_each(vector.begin(), vector.end(), show);
for_each(vector.rbegin(), vector.rend(), show);
deque
- 双端队列
- 首位插入,时间固定
- 复杂度高于vector,即插入删除时间将高于vector
- 其他与vector相同,
list
- 双向链表
- 任意位置插入与删除,时间皆固定
- 强调快速插入、删除数据
- 不支持数组表示法与随机访问
void merge(list<T, Alloc>&x);
void splice(lterator pos, list<T, Alloc>&x);
void insert(lterator pos, list<T, Alloc>&x);
void remove(const T & val);
void sort();
void unique();
forward_list
- 单向链表
- 不可反转
- 正向迭代器
queue
- 适配器类
- 不允许随机访问
- 不允许遍历
- 从队尾添加
- 从队首删除
- 查看队尾/队首的值
- 检查元素数目
- 测试队列是否为空
bool empty()const;
size_type size()const;
T& fornt();
T& back();
void push(const T& x);
void pop()
priority_queue
stack
- 栈
bool empty()const;
size_type size()const;
T& top();
void push(const T& x);
void pop()
set
- 关联容器
- 提供了对于元素的快速访问
- 不能指定插入元素位置
- 使用树形实现
- 键与值相同
- 元素不可重复
set_union(a.begin(), a.end(), b.begin(), b.end(), ostream_iterator<string, char> out(cout, ""));
set_union(a.begin(), a.end(), b.begin(), b.end(), insert_iterator<set<string>> (c, c.begin()));
mutiset
- 与set不同的在于其元素可以重复
map
multimap
- 可以反转
- 一个键可以与多个值关联
- 兼职类型不同
using namespace std;
typedef int KeyType;
typedef pair<const int, string> Pair;
typedef multimap<const int, string> Mapcode;
int main()
{
Mapcode codes;
codes.insert(Pair(110, "郑州"));
codes.insert(Pair(110, "洛阳"));
codes.insert(Pair(111, "泰州"));
codes.insert(Pair(111, "苏州"));
codes.insert(Pair(112, "广州"));
codes.insert(Pair(112, "深圳"));
Mapcode::iterator it;
for (it = codes.begin(); it != codes.end(); ++it)
{
cout << (*it).first << " " << it->second << endl;
}
cout << "==================" << endl;
pair<Mapcode::iterator, Mapcode::iterator> range = codes.equal_range(111);
cout << range.first->first << " " << range.first->second << endl;
cout << range.second->first << " " << range.second->second << endl;
cout << "==================" << endl;
for (it = range.first; it != range.second; ++it)
{
cout << (*it).first << " " << it->second << endl;
}
}
110 郑州
110 洛阳
111 泰州
111 苏州
112 广州
112 深圳
==================
111 泰州
112 广州
==================
111 泰州
111 苏州
unordered_map
unordered_multimap
unordered_set
unordered_multiset
bitset