STL常用容器
- 初始化
- C<T> C:空容器,所有容器使用
- C c(c2):创建c2的副本,要求c2与C元素类型一致,所有容器使用
- C c(b,e):迭代器b和e范围内的副本,所有容器使用
- C c(n,t):n个t的元素创建c,只适用于顺序容器
- C c(n):n个值初始化的c,只适用于顺序容器
- 容器的容器:vector< vector<string> >, 注意不能是vector< vector<string>>, 因为>>是右移
- 迭代器操作:
- *:取值:
- ->:解引用,iter->mem等效于(*iter).mem
- ++ --
- == !=
- 以下操作只适用于vector和deque类型迭代器
- iter +/- n
- iter1 +/-= iter2
- iter1 – iter2
- <, >, <=, >=
- 容器定义的类型别名:
- size_type 长度
- iterator, const_iterator reverse_iterator const_reverse_iterator
- difference_type 迭代器差值
- value_type 元素类型
- reference 元素类型的左值类型,即value_type&
- const_reference 常量左值,即const value_type&
- 容器操作
- begin() end() rbegin() rend(): 如果容器是const,则返回const_iterator, 否则返回iterator
- 添加元素
- push_back(t):添加值为t的副本,会复制t,所有顺序容器都支持
- push_front(t):在容器c的前端添加t的副本,只适用于list和deque
- insert(p,t): 在迭代器p之前插入t的副本
- insert(p,n,t): 在迭代器p之前插入n个t的副本
- insert(p,b,e):在迭代器p之前插入b和e之间的元素副本
- 添加和删除元素都会导致容器重新加载,所有迭代器失效,避免存储end操作返回的迭代器
- 大小操作
- size() :元素个数
- max_size() : 最多元素
- empty() 返回大小是否为0
- resize(n): 调整容器大小为n,如果n<原来的size,则删除多出来的,如果小于,则添加值初始化的新元素
- resize(n,t): 所有新添加的元素值都为t
- resize可能会使迭代器失效
- 访问操作(都返回引用):
- front() back()
- c[n], c.at(n) 返回下标为n的引用,只适用于vector和deque
- 删除操作:
- erase(p):删除迭代器p指向的元素
- erase(b,e):删除b和e之间的元素
- clear(): 清空所有元素
- pop_back():删除最后一个元素
- pop_front(): 删除第一个元素,只适用于list和deque
- 删除操作会使迭代器失效
- 赋值与swap
- c1 = c2: 删除c1所有元素,将c2所有元素复制给c1
- c1.swap(c2): c1,c2交换
- c.assign(b,e): 重新设置c,将b和e之间的元素复制给c,b和e不能指向c中元素。
- vector的自增长
- 容器选用(一般vector都是最佳选择)
- 随机访问:vector或deque
- 中间插入或删除:list
- 首尾插入或删除:deque
- 在读取时在中间插入,然后需要随即访问,则可首先选用list,然后复制给一个vector
- 容器适配器: stack和queue都是基于deque,priority_queue基于vector
- 将一个顺序容器指定为适配器的第二个类型实参,可覆盖默认基础容器,e.g. stack< string, vector<string> > str_stk;
- 栈适配器
- empty()
- size()
- pop()
- top()
- push(item)
- 队列
- empty()
- size()
- pop():删除队首
- front():返回队首,不删除
- back():返回队尾,不删除
- push(item),队尾插入
- 优先队列
- empty()
- size()
- pop():
- top(): 返回最高优先级的元素
- push(item): 基于优先级在适当位置插入新元素
摘自:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html