3. Deque容器
3.1 deque基本概念
功能: 双端数组,可以对头端进行插入删除操作
deque与vector区别:
- vector对于头部的插入删除效率极低,数据量越大,效率越低
- deque相对而言,对于头部的插入删除速度会比vector快
- vector访问元素时的速度会比deque快
deque内部工作原理:
- deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实的数据
- 中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
- deque容器的迭代器也支持随机访问
3.2 deque构造函数
函数原型:
deque v; // 采用模板实现类实现,默认构造函数
deque(v.begin(),v.end()); // 将v[begin(),end()]区间中元素拷贝给本身
deque(n,elem); // 构造函数将n个elem拷贝给本身
deque(const vector &vec); // 拷贝构造函数
3.3 deque赋值操作
deque& operator=(const deque &deq); 重载等号操作
assign( beg, end ); 将[begin,end]区间中元素赋值给本身
assign( n, elem ); 将n个elem拷贝赋值给本身
3.4 deque大小操作
deque.empty(); // 判断容器是否为空
deque.size(); // 返回容器中元素个数
deque.resize(int num); // 重新制定容器的长度为num,若容器变长,则以默认值填充新位置;
deque.resize(int num,elem);// 重新制定容器的长度为num,若容器变长,则以elem值填充新位置;
// 若容器变短,则末尾超出容器长度元素被删除
deque容器没有容量概念,可以无限扩充
3.5 deque插入和删除
两端插入操作:
push_back(ele); // 尾部插入元素ele
push_front(ele); // 头部插入元素ele
pop_back(); // 删除最后一个元素
pop_front(); // 删除第一个元素
指定位置操作:
insert(const_iterator pos,ele); // 在pos插入一个ele元素的拷贝,返回新数据的位置
insert(const_iterator pos,int n,ele); // 在pos插入n个ele元素的拷贝,返回新数据的位置
insert(const_iterator pos,begin,end); // 在pos位置插入[begin,end]区间数据,无返回值
erase(const_iterator pos); // 删除pos位置数据,返回下一个数据位置
erase(const_iterator start,const_iterator end); // 删除[begin,end]区间数据,返回下一个数据位置
clear(); // 删除容器中所有元素
3.6 deque数据存储
at(int index); // 返回索引idx所指的数据
operator[]; // 返回索引idx所指的数据
front(); // 返回容器最后第一个数据元素
back(); // 返回容器中最后一个数据元素
3.7 deque排序操作
sort(iterator beg,iterator end); // 对beg和end区间内元素进行排序
默认排序规则为升序,对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
4. Stack容器
4.1 stack基本概念
stack是一种先进后出(First In Last Out,FILO)的数据结构,只有一个出口。
栈不允许遍历行为,只有栈顶元素才能被访问。
4.2 stack常用接口
构造函数;
stack stk; // stack采用模板类实现,stack默认构造行驶
stack(const stack &stk); // 拷贝构造函数
赋值操作:
stack& operator=(const stack &stk);
数据存取:
push(elem); // 向栈顶添加元素
pop(); // 从栈顶移除第一个元素
top(); // 返回栈顶元素
大小操作:
empty(); // 判断栈是否为空
size(); // 返回栈的大小
5. Queue容器
5.1 queue基本概念
Queue是一种先进先出(First In First Out.FIFO)的数据结构,它有两个出口。
- 队列容器允许从一端新增元素,从另一端移除元素
- 队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为
- 队列中进数据称为---入队push
- 队列中出数据称为---出队pop
5.2 queue常用接口
构造函数;
queue que; // queue采用模板类实现,queue默认构造行驶
queue(const queue &que); // 拷贝构造函数
赋值操作:
queue& operator=(const queue &que);
数据存取:
push(elem); // 向栈顶添加元素
pop(); // 从栈顶移除第一个元素
front(); // 返回第一个元素
back(); // 返回最后一个元素
大小操作:
empty(); // 判断队列是否为空
size(); // 返回栈的大小