顺序容器:vector list deque(双端队列),
顺序容器适配器:stack queue priority_queue
关联容器:map set
顺序容器:
1)顺序容器的定义
使用容器要先包含所在的头文件vector,list还有deque,容器类是带有模板的类,初始化还有定义时要记得实例化方法。
①容器的初始化,容器提供了多种构造函数,如下:
C<T> c;
C c(c2);
C c(b,e); 创建容器c,其元素是迭代器b和e标识的范围内元素的副本,适应于所有容器
C c(n,t); 用n个值为t的元素创建容器c;只适应于顺序容器
C c(n); 创建具有n个值初始化元素的容器c;只适应于顺序容器
②容器内元素的类型约束
元素类型必须支持赋值操作
元素类型必须可以复制
2)迭代器
①常用迭代器的运算
*it;
it->men;
++it;it++;it--;--it;
it1==it2;it11=it2;
②vector和deque类型迭代器支持的操作
it+n;it-n;
it1 +=it2;it1 -=it2;
it1 - it2;
>,>=,<,<=
③迭代器范围
可以用两个指向同一个容器不同元素的迭代器之间的范围,标志迭代器范围。用first和last表示,则其范围为[first,last),其中last可以是指向超出末端的下一位置。
④当容器元素被修改或者删除时可能会引起迭代器的失效
3)顺序容器的操作
c.begin();c.end();
c.rbegin();c.rend(); 返回一个逆迭代器,分别指向最后一个元素和第一个元素的前一个位置
c.push_back(t);在c的尾部添加一个元素t;返回值为void //只适应于vector和deque
c.push_front(t);在c的前端添加t //只适应于vector和deque
c.insert(p,t);在迭代器p前面添加t
c.insert(p,n,t);在p前添加n 个值为t的元素
c.insert(p,b,e);在p前添加迭代器b和e之间的元素
c.size(); 返回c中元素个数,返回值为c::size_type
c.max_size();返回c中最多可容纳的元素数
c.empty();为空则返回true
c.resize(n);调整c的大小使其可以容纳n个元素,若n<c.size()则删除多余的元素,否则添加值初始化的新元素
c.resize(n,t)调整c的大小使其可容纳n个元素,新添加的元素值为t
c.back();返回容器c的最后一个元素的引用,若c为空则操作未定义
c.front();返回c的第一个元素的引用,若c为空则操作未定义
c[n];同下
c.at(n);返回小标为n的元素的引用,只适应于vector和deque,若下标越界则操作未定义
c.erase(p);删除迭代器p指向的元素,返回被删除元素的后面一个元素的迭代器,若p指向超出末端的下一个位置,则该函数未定义
c.erase(b,e);删除迭代器b和e之间的元素,返回被删除元素段的后一个元素迭代器,若e指向超出末端的下一位置,返回的迭代器指向超出末端的下一位置
c.clear();删除所有元素,返回void
c.pop_back();删除最后一个元素,返回void,若c为空,则该函数未定义
c.pop_front();删除第一个元素,返回void,若c为空,则该函数未定义
赋值和assign操作会使左操作数的迭代器失效,swap则不会
c1=c2;删除c1中元素,然后将c2元素复制给c1。要求c1和c2的容器类型和元素类型必须一致
c1.swap(c2);将c1和c2的元素交换,要求c1和c2的容器类型和元素类型必须一致,执行速度比=操作快,而且不会使迭代器失效
c.assign(b,e);将迭代器b和e之间的元素复制到c中,要求迭代器b,e不能指向c的元素
c.assign(n,t);将c中元素置为n个t
vector的自增长
c.capacity();返回当前容器的容量
c.reserve(n);设置vector容器的预留n个元素的存储空间
顺序容器的选用
vector | 从后面快速的插入与删除,直接访问任何元素 |
deque | 从前面或后面快速的插入与删除,直接访问任何元素 |
list | 双链表,从任何地方快速插入与删除 |
4)string类型
string 类型可以使用很多容器操作
insert()
assign()
erase()
string类型的其他操作:
substr();
append();
replace();
find();系列函数
compare();系列函数
5)容器适配器:stack queue priority_queue
stack适配器:
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);对于队列:在队尾压入item;对于优先级队列在基于优先级的适当位置插入新元素
关联容器:
可以使用大多顺序容器的操作,但不提供front,push_front,pop_front,back,push_back,pop_back。
初始化时不能通过指定容器大小初始化
不提供assign操作
关联容器的erase操作返回void类型
resize操作不能用于关联容器
1)map类型
使用下标访问元素,若map中无该元素,则自动添加该元素
count(k)检查键值k出现的次数
find(k)返回键值k对应的元素的迭代器,若不存在返回超出末端的迭代器
2)set类型
存储的只是键的集合,不支持下标访问
3)multimap 和 multiset
可以是一个键对应多个值,multimap不支持下标操作