一、顺序容器类型
顺序容器:vector、list、deque
适配器:stack、queue、priority_queue
使用这些容器都必须使用相应的头文件
二、容器元素初始化
C<T> c; 创建一个名为c的空容器
C<T> c(c2); 创建容器c2的副本
C<T> c(b,e); 创建c,其元素是迭代器b和e的范围内的副本,区间为前闭后开。
C<T> c(n,t); 创建n个值为t的元素创建c。只适用于顺序容器
C<T> c(n) ; 创建有n个初始化元素的容器c。只适用于顺序容器
三、容器内元素的类型约束
1、元素类型对象必须支持赋值运算。
2、元素类型对象必须可以复制。
因此引用类型和IO库类型不能为容器的元素。
四、迭代器范围
一般为左闭右开区间
五、容器定义的类型别名
size_type:无符号整形。
iterator: 此容器的迭代器类型
const_iterator:元素的只读迭代器类型
reverse_iterator:按逆序寻址的迭代器,逆序迭代器做++操作将指向容器的前一个元素
const_reverse_iterator:只读逆序迭代器
value_type:元素类型
六、begin和end成员
c.begin() 返回迭代器,指向第一个元素。
c.end() 返回迭代器,指向最后一个元素的下一个位置
c.rbegin() 指向最后一个元素
c.rend() 指向第一个元素的前一个位置
七、顺序容器中添加元素
c.push_back(t):容器尾部插入一个元素。适合所有顺序容器。
c.push_front(t): 容器前段添加元素。只适合list和deque类型
c.insert(p,t); 在迭代器p所指向元素之前插入元素t,返回新元素的迭代器。
c.insert(p,n,t);在迭代器p所指向元素之前插入n个t,返回void。
c.insert(p,b,e); 在迭代器p之前插入由迭代器b和e标记的范围内元素,返回void。
注意:容器元素都是副本
八、关系操作
1、如果两个容器具有相同的长度且所有元素都相等,那么这两个容器就相等
2、如果两个容器的长度不同,但较短的容器中所有元素都等于较长容器中对应的元素,则较短的容器小于另一个元素。
3、如果两个容器都不是对方的初始化子列,则他们的比较结果取决于所比较的第一个不相等的元素。
九、容器大小的操作
c.size() 返回c中元素的个数
c.max_size() 返回容器c中可容纳的最多元素个数
c.empty() 判断容器是否为空
c.resize(n) 调整容器c的长度大小,使其能容纳n个元素
c.resize(n,t) 调整容器c的大小为n,并初始化为t
十、元素访问
c.back() 返回容器的最有一个元素的引用
c.front() 返回容器c的第一个元素的引用
c[n] 返回下标为n的元素的值。只适用于vector和deque
c.at(n) 返回下标为n的元素的值。只适用于vector和deque
十一、删除元素
c.erase(p) 删除p所指向的元素,返回指向其下一个元素的迭代器。
c.erase(b,e) 删除迭代器b,e之间的元素,返回e的下一个迭代器。
c.clear() 删除c内所有元素
c.pop_back() 删除c的最后一个元素,返回void。
c.pop_front() 删除c的第一个元素,返回void。只适用于list和deque。
十二、赋值和swap
c1 = c2 ; 删除c1的所有元素,然后将c2的元素复制给c1.
c1.swap(c2); 交换内容,c1中存放的是c2的内容,c2存放的是c1的内容
c.assign(b,e) 重新设置c的元素,将迭代器b和e所标记的所有元素复制到c中,b和e必须不是指向c中元素的迭代器
c.assign(n,t) 将容器c重新设置为存储n个值为t的元素。
十三、适配器
栈适配器
s.empty()
s.size()
s.pop() 删除栈顶元素,但不返回其值
s.top() 返回栈顶的元素值
s,push(item)
队列适配器和优先级队列适配器
q.empty()
q.size()
q.pop() 删除对首元素
q.front() 返回队首元素,只适用于队列
q.back() 返回队尾元素,只适用于队列
q.top() 返回具有最高优先级的元素值,但不删除该元素,只适应于优先级队列
q.push(item) 对于queue,在队尾压入一个新元素
对于priority_queue,在基于优先级的适当位置插入新元素。