|
Posted on
2010-08-19 00:09
KurtWang
阅读( 739)
评论()
编辑
收藏
举报
- 顺序容器:vector(快速随机访问); list(快速插入删除); deque(双端队列)
- 顺序容器适配器:stack 后进先出,栈; queue 后进先出,队列; priority_queue 优先队列;
- 初始化
- 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的自增长
- capacity和reserve
-
- size值是当前的大小,capacity则指必须分配新存储空间之前可以存储的元素总数。
- 容器选用(一般vector都是最佳选择)
- 随机访问:vector或deque
- 中间插入或删除:list
- 首尾插入或删除:deque
- 在读取时在中间插入,然后需要随即访问,则可首先选用list,然后复制给一个vector
- string
- 构造string的其他方法
- string s(cp, n) 初始化为cp的前n位副本
- string s(s2, pos2) 创建s2从下标pos2开始的副本
- stirng s(s2, pos2, len2) 同上,创建长为len2的副本
- 修改string的其他方法:
- s.insert(pos, n, c) : pos前插入n个c
- s.insert(pos, s2): pos前插入字符串s2
- s.insert(pos, s2, pos, len): pos前插入s2在pos开始的len个字符的副本
- s.insert(pos, cp, len): pos之前插入cp的前len个字符
- s.insert(pos, cp); pos之前插入cp
- s.assign(s2): 用s2的副本来替换s
- s.assign(s2, pos2, len)
- s.assign(cp,len)
- s.assign(cp)
- s.erase(pos, len): 删除pos开始的len个字符
- 上述操作都返回s的引用
- 只适用于string类型的操作
- substr
- substr(pos,n): 返回s在pos开始的n个字符
- substr(pos); 返回下标pos开始直到末尾的字符
- substr() 返回s副本
- append和replace
- append(args)
- replace(pos, len, args)
- replace(b, e, args)
- args说明:
- s2 字符串s2
- s2,pos,len 字符串s2从pos开始的len个字符
- cp :char * cp
- cp, len": cp开始的len个字符
- n,c:n个c字符
- b2, e2: 迭代器b2到e2范围内所有字符
- 查找操作,返回类型为size_type
- find(args) rfind(args)
- find_first_of(args) find_last_of(args)
- find_first_not_of(args) find_last_not_of(args)
- args说明:
- c,pos 从pos开始找字符c
- s2, pos 从pos开始找字符串s2
- cp,pos 从pos开始找字符串cp
- cp,pos,n 从pos开始找字符串cp的前n个字符
- pos默认形参为0
- string上的操作区分大小写
- 比较操作:compare函数
- compare(s2) 比较s1和s2
- compare(pos1, n1, s2) 比较s1从pos1开始的n1个字符与s2
- compare(pos1, n1, s2, pos2, n2) 比较s1从pos1开始的n1个字符与s2从pos2开始的n2个字符
- compare(cp) 比较cp
- compare(pos1,n1,cp) 比较s1从pos1开始的n1个字符与cp
- compare(pos1,n1,cp,n2) 比较s1从pos1开始的n1个字符与cp的前n2个字符
- 容器适配器: 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): 基于优先级在适当位置插入新元素
|