C++中的顺序容器、容器适配器总结

顺序容器:
一、概述

1.vector:
内部是数组结构,支持快速的随机访问,但是插入元素时效率低下,需要在一开始就分配大块内存空间;
2.list:
内部是链表结构,支持快速的插入和删除元素,但是不能快速的随机访问。
3.deque:
内部与vector相似,但是其不是一开始就分配一块较大的内存空间,而是使用多块内存空间。并且其空间的大小可向两头移动。所以和vector相比,其不仅可以在尾部进行删除和添加操作,还可以在首部进行删除和添加操作。其他首部的insert和erase操作特别快。
二、容器的操作
1.迭代器操作:(适用于所有的标准库容器)
*iter 返回迭代器所指向的引用
iter->mem 对iter进行解引用
++iter 自增
iter++
–iter 自减
iter–
iter1==iter2 比较两个迭代器是否相等
iter1!=iter2
iter +n、iter-n、iter1+=iter2、iter1-=iter2、
注:适合改变迭代器大小的操作都有可能使得迭代器失效

2.begin()和end()成员(支持所有容器)
c.begin() 、c.end() 返回一个迭代器,指向第一个和最后一个的下一个成员
c.rbegin() 返回一个逆序迭代器。指向容器c的最后一个元素
c.rend() 返回一个逆序迭代器,指向容器c的第一个元素的前面一个位置

3.在容器中添加元素
c.pushback(t) 支持所有容器
c.pushfront(t) 只支持list和deque容器
c.insert(p,t)、c.insert(p,n,t)、c.insert(p,b,e) 支持所有容器

4.容器大小的操作(支持所有容器)
c.size() 返回c中的元素个数。返回类型为c::size_type
c.max_size() 返回c中所能容纳的最大个数,类型为:c::size_type
c.empty()
c.resize(n) 改变容器的大小

5.访问元素
c.back() 返回容器c中的最后一个元素的引用
c.front() 返回容器c中的第一个元素的以引用
c[n] 下标操作 只适用于vector和deque 只能操作已存在的元素
c.at[n] 下标操作 只适用于vector和deque 只能操作已存在的元素

6.删除操作
c.erase(p) 删除迭代器p指向的元素
c.erase(b,e)
c.clear() 删除容器c中的所有元素
c.pop_back() 删除容器c中的最后一个元素
c.pop_front() 删除容器c中的第一个元素,只适用于list和deque

7.赋值与swap
c1=c2 删除c1中的所有元素,再把c2中的所有元素赋值给c1c
c1.swap(c2) 交换内容
c.assgin(b,e) 重置c中的元素,并将迭代器范围内的元素赋值给c
c.assgin(n,t) 将容器c重新设置为存储n个值为t的元素

三、容器适配器
1.queue、stack、priority_queue
容器适配器都需要一个关联容器,不同容器适配器其关联的容器也不一样
queue:先进先出的数据结构,需要在队头和队尾同时操作元素,所以其可以关联的容器有list(默认)和deque;
stack:先进后出的数据结构,只需要在队尾操作元素即可,其可关联三种容器;
priority_queue:由于其在插入元素时根据优先级插入元素,插入位置不固定。所以其要求有随机访问的功能,所以一般只建立在vector和deque上;

2.栈适配的操作
s.empty() 判断栈是否为空
s.size() 返回栈中元素个数
s.pop() 删除栈顶元素
s.top() 返回栈顶元素,但是不删除
s.push(item) 在栈顶压入新的元素

3.队列和优先级队列
q.empty()、q.size()、q.top()、
q.front()、q.back() 只适用于队列
q.top() 只适用于优先级队列

stack<int> initStack----->采用的是默认的关联容器
stack<int,vector<int> > initStcak----->通过第二个实参来指定适配器夺冠两的容器

猜你喜欢

转载自blog.csdn.net/chihunqi5879/article/details/81482585