C++ STL标准模板库——deque
deque基本概念
deque是双端数组,可以对头端和尾端进行插入和删除操作
deque和vector的区别:
- vector对于头端的插入删除效率低,数据量越大效率越低
- deque相对而言,对头部的插入删除速度比vector快
- vector访问元素时的速度会比deque快
deque的内部原理:
deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据;中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间;
deque容器的迭代器也是支持随机访问的
在使用前要添加 #include<deque>头文件
deque构造函数
- deque deq; //默认构造形式
- deque(beg,end); //将[beg,end]区间的元素拷贝到本身
- deque(n,elem); //将n个elem元素拷贝到本身
- deque(const deque &deq); //将对象deq拷贝到本身
deque赋值操作
有两种方法:操作符 = 和 .assign( )
- assign(beg,end); //将[beg,end]区间的元素拷贝到本身
- assign(n,elem); //将n个elem元素拷贝到本身
deque大小操作
- deque.empty(); //判断是否为空
- deque.size(); //返回容器中元素的个数
- deque.resize(int num); //将容器的容量从新设置为num,若容量变大,则以默认值填充新位置;若容量变小,则超出容器容量的元素被删除
- deque.resize(int num,elem); //将容器的容量从新设置为num,若容量变大,则以元素elem填充新位置;若容量变小,则超出容器容量的元素被删除
deque插入和删除
两端插入操作:
- deque.push_back(elem); //在容器尾部添加元素elem
- deque.push_front(elem); //在容器头部添加元素elem
- deque.pop_back(); //删除容器尾部元素
- deque.pop_front(); //删除容器头部元素
指定位置操作:
- deque.insert(pos,elem); //在迭代器pos位置插入元素elem
- deque.insert(pos,n,elem); //在迭代器pos位置插入n个元素elem
- deque.insert(pos,beg,end); //在迭代器pos位置插入区间[deque.begin(),deque.end()]内的元素
- deque.clear(); //清空容器内所有数据
- deque.erase(beg,end); //清除区间[deque.begin(),deque.end()]内的元素
- deque.erase(pos); //清除迭代器pos位置的元素
deque数据存取
- deque.at(int idx); //返回索引idx所指的数据
- deque[int idx]; //返回索引idx所指的数据
- deque.front(); //返回容器第一个数据元素
- deque.back(); //返回容器最后一个数据元素
deque排序
在使用前要添加 #include<algorithm>头文件
- sort(dque.begin(),deque.end()); //对begin和end区间元素进行排序
对于支持随机访问的迭代器都可以利用sort算法进行排序