文章目录
-
- 功能:
- deque构造函数
- deque赋值
- deque容器大小
- deque插入、删除
- deque数据存取
- deque排序
功能:
- 双端数组,可以对头端进行插入删除操作
deque与vector区别:
- vector对于头部的插入删除效率低,数据量越大,效率越低
- 相对而言,deque对头部的插入删除速度要快
- vector访问元素时的速度会比deque快,这和两者内部实现有关
deque内部工作原理:
deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
deque构造函数
函数原型:
deque<T>deqT;
//默认构造形式deque(beg,end);
//将另一个deque容器【beg,end)区间中的元素拷贝给本身deque(n,elem);
//将n个elem元素拷贝给本身deque(deq);
//拷贝另一个容器deq
示例:
//无参构造函数
deque<int>d1;//将容器d1元素拷贝给d2
deque<int>d2(d1.begin(),d1.end());//将10个100拷贝给本身
deque<int>d3(10,100);//拷贝容器d3给容器d4
deque<int>d4(d3);
deque容器和vector容器的构造方式几乎一致,灵活使用即可
deque赋值
功能:
给deque容器进行赋值
函数原型:
=
.assign(beg,end);
//将另一个deque容器【beg,end)区间中的元素拷贝给本身.assgin(n,elem);
//将n个elem元素拷贝给本身
赋值操作和vector类似,这里不再赘述
deque容器大小
功能:
- 对deque容器的大小进行操作
函数原型:
.empty();
//判断容器是否为空.size();
//返回容器中元素的个数.resize(n);
//重新指定容器的长度为num,若容器变长,则以默认值填充新位置;若容器变短,则末尾超出容器长度的元素被删除.resize(n,elem);
//重新指定容器的长度为num,若容器变长,则以elem值填充新位置;若容器变短,则末尾超出容器长度的元素被删除
deque没有容量(capacity)的概念,当deque容器需要更大的空间时,deque会自动扩展
大小操作和vector类似,这里不再赘述
deque插入、删除
功能:
- 向deque容器中插入和删除数据
函数原型:
两端插入操作:
.push_front(elem);
//在容器头部添加一个数据.push_back(elem);
//在容器尾部添加一个数据.pop_front();
//删除容器第一个数据.pop_back();
//删除容器最后一个数据
指定位置插入操作:
.insert(pos,elem);
//在pos位置插入一个elem元素,返回新数据的位置.insert(pos,n,elem)
//在pos位置插入n个elem元素,无返回值.insert(pos,beg,end);
//在pos位置插入另一个容器【beg,end)区间的数据,无返回值
删除操作:
.clear();
//清空容器中的所有数据.erase(beg,end);
//删除【beg,end)区间的数据,返回下一个数据的位置.erase(pos);
//删除pos位置的数据,返回下一个数据的位置
示例:
deque<int>d1;d1.push_back(5); //d1初始值为5//两端操作d1.push_front(1); //头插,结果为1 5d1.push_back(9); //尾插,结果为1 5 9d1.pop_front(); //头删,结果为5 9d1.pop_back(); //尾删,结果为5//指定位置插入d1.insert(d1.begin(), 10); //结果为10 5d1.insert(d1.end(), 2,20);//结果为10 5 20 20deque<int>d2;d2.push_back(6); //d2初始值为6d2.insert(d2.begin(), d1.begin(), d1.end());//向d2容器中插入d1容器的元素,结果为10 5 20 20 6//指定位置删除deque<int>::iterator pos = d2.erase(d2.begin());//pos是迭代器,*pos结果为5,&pos结果为地址//按区间方式删除d1.clear(); //d1清空d2.erase(d2.begin(), d2.end()); //d2清空
结果如下:
deque数据存取
功能:
- 对deque容器中的数据进行存取操作
函数原型:
.at(pos)
//返回索引pos所指的数据[pos]
//返回索引pos所指的数据.front()
//返回容器中第一个数据元素.back()
//返回容器中最后一个数据元素
存取操作和vector类似,这里不再赘述
deque排序
功能:
- 利用sort算法实现对容器进行排序
函数原型:
sort(beg,end);
//对容器中【beg,end)区间内元素进行排序,默认升序排序
使用sort需要引入头文件<alogrithm>
另外,对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序,如vector;list不支持随机访问,内部会提供对应排序算法:.sort()