当前位置: 代码迷 >> 综合 >> C++常用STL容器--deque
  详细解决方案

C++常用STL容器--deque

热度:105   发布时间:2023-11-23 11:50:15.0

文章目录

    • 功能:
    • 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()

  相关解决方案