C++容器deque的用法

article/2025/10/4 2:09:05

目录

1.deque容器概念

2.deque对象的构造

2.1deque对象的默认构造

2.2deque对象的带参数构造

3.deque头部和末尾的添加移除操作

4.deque的数据存取

5.deque与迭代器

6.deque的赋值

7.deque的大小

8.deque的插入

9.deque的删除


1.deque容器概念

deque容器概念

deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的是:

deque是双端数组,而vector是单端的。

 

 Deque 特点:

  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
  • deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)
  • deque头部和尾部添加或移除元素都非常快速, 但是在中部安插元素或移除元素比较费时。

使用时,包含头文件:#include <deque>  

2.deque对象的构造

2.1deque对象的默认构造

deque也是采用模板类实现。

deque对象的默认构造形式:deque<T> deqT

例如:

deque <int> deqInt;            //存放int的deque容器。

deque <float> deqFloat;         //存放float的deque容器。

deque <student> deqStu;        //存放student的deque容器。

...

注意:尖括号内还可以设置指针类型或自定义类型。 

2.2deque对象的带参数构造

方式1:deque(beg,end);    //构造函数将[beg, end)区间中的元素拷贝给本身。

方式2:deque(n,elem);   //构造函数将n个elem拷贝给本身。

方式3:deque(const deque  &deq);  //拷贝构造函数。

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deque<int> deqIntB(deqIntA.begin(),deqIntA.end()); //1 2 3 4deque<int> deqIntC(8, 666); //8 8 8 8 8deque<int> deqIntD(deqIntA); //1 2 3 4

3.deque头部和末尾的添加移除操作

1.deque.push_back(element); //容器尾部添加一个数据

2.deque.push_front(element); //容器头部插入一个数据

3.deque.pop_back();         //删除容器最后一个数据

4.deque.pop_front();     //删除容器第一个数据

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);deqIntA.push_back(6);deqIntA.pop_front();deqIntA.pop_front();deqIntA.push_front(7);deqIntA.push_front(8);deqIntA.pop_back();deqIntA.pop_back();deqIntA 中剩余元素: 8 7 3 4 

4.deque的数据存取

第一  使用下标操作 deqIntA[0] = 100;

第二  使用at 方法 如: deqIntA.at(2) = 100;

第三  接口返回的引用 deqIntA.front() 和 deqIntA.back()  

注意:   第一和第二种方式必须注意越界

例如:deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);int i1 = deqIntA.at(0); //i1 = 1int i2 = deqIntA[1]; //i2 = 2deqIntA.at(0) = 666; //第一个元素改成666deqIntA[1] = 888; //第二个元素改成888int iFront = deqInt.front(); //666int iBack = deqInt.back(); //5deqInt.front() = 888; //第一个元素改成  888deqInt.back() = 666; //最后一个元素改成 666

5.deque与迭代器

1.deque.begin();  //返回容器中第一个元素的迭代器。

2.deque.end();   //返回容器中最后一个元素之后的迭代器。

3.deque.rbegin();  //返回容器中倒数第一个元素的迭代器。

4.deque.rend();   //返回容器中倒数最后一个元素之后的迭代器。

5.deque.cbegin();  //返回容器中第一个元素的常量迭代器。

6.deque.cend();   //返回容器中最后一个元素之后的常量迭代器。

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);//普通迭代器for(deque<int>::iterator it = deqIntA.begin(); it!=deqIntA.end(); ++it){(*it)++;  //*it++  (*it)++cout<<*it;cout<<" ";}//常量迭代器deque<int>::const_iterator cit = deqIntA.cbegin();for( ; cit!=deqIntA.cend(); cit++){cout<<*cit;cout<<" ";}//逆转的迭代器for(deque<int>::reverse_iterator rit=deqIntA.rbegin(); rit!=deqIntA.rend(); ++rit){cout<<*rit;cout<<" ";}

6.deque的赋值

1.deque.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

2.deque.assign(n,elem);  //将n个elem拷贝赋值给本身。

3.deque& operator=(const deque &deq); //重载等号操作符

4.deque.swap(deq);  // 将deque与本身的元素互换

例如:deque<int> deqIntA,deqIntB,deqIntC,deqIntD;deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);deqIntB.assign(deqIntA.begin(),deqIntA.end()); // 1 2 3 4 5deqIntC.assign(4,888); //888 888 888 888 deqIntD = deqIntA; //1 2 3 4 5deqIntC.swap(deqIntD); //互换

7.deque的大小

1.deque.size();     //返回容器中元素的个数

2.deque.empty();     //判断容器是否为空

3.deque.resize(num);    //重新指定容器的长度为num,若容器变长,则以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

4.deque.resize(num, elem);  //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);int iSize = deqIntA.size();  //5deqIntA.resize(7); //1 2 3 4 5 0 0deqIntA.resize(8,1); //1 2 3 4 5 0 0 1deqIntA.resize(2); //1 2

8.deque的插入

1.deque.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据 的位置。

2.deque.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。

3.deque.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值

9.deque的删除

1.deque.clear();      //移除容器的所有数据

2.deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。

3.deque.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。


http://chatgpt.dhexx.cn/article/OGPbxZ9U.shtml

相关文章

C++ deque

C deque 简介 所谓的deque是”double ended queue”的缩写&#xff0c;双端队列不论在尾部或头部插入元素&#xff0c;都十分迅速。而在中间插入元素则会比较费时&#xff0c;因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型&#xff0c;提供了在序列两端快速…

C++ queue 和 deque的区别

从使用的角度来讲主要差别就是&#xff1a; deque支持push_front、pop_front、push_back、pop_back。 queue支持push_back、pop_front。 ---------------------------------------------------------------------------- deque是双端队列 #include<deque>template&l…

C++——deque

文章目录 Deque 与 vector 的异同点构造操作非更易型操作更易型操作使用例子 容器 deque (发音为“deck”)和 vector 非常相似。它也采用dynamic array来管理元素&#xff0c;提供随机访问&#xff0c;并有着和 vector 几乎一模一样的接口。不同的是 deque 的 dynamic array 头…

C++中deque用法详解

deque函数&#xff1a; deque容器为一个给定类型的元素进行线性处理&#xff0c;像向量一样&#xff0c;它能够快速地随机访问任一个元素&#xff0c;并且能够高效地插入和删除容器的尾部元素。但它又与vector不同&#xff0c;deque支持高效插入和删除容器的头部元素&#xff0…

python中的deque模块(collections的deque模块)

目录 1. deque是python的collections中的一个类 2.deque的简单使用以及它的方法 2.1 创建deque的方法 2.2 创建deque时&#xff0c;并指定大小maxlen&#xff0c;即能装几个元素&#xff0c; 以及deque添加元素append()方法 2.3 deque的 appendleft()方法 2.4 deque的 clear()…

C++中deque的用法(超详细,入门必看)

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 如果本文对你有所帮助的话&#xff0c;希望可以点赞&#x1f44d;收藏&#x1f4c2;支持一下哦&#xff01; 期待…

Java数据结构之Deque

Java数据结构之Deque 引题Deque接口分析Deque的注释与Queue的联系还在使用Stack&#xff1f;你OUT啦&#xff01;peek方法更方便与List的不同与null说goodbye 子类ArrayDeque.class分析基本结构官方的代码图解数据存储过程 简单思考 1部分代码的分析关于初始容量关于扩容代码中…

java关于Deque的使用

定义 双向队列&#xff1a;支持插入删除元素的线性集合。 java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 和Queue的区别 Deque是double ended queue&#xff0c;将其理解成双端结束的队列&#xff0c;双端队列&#xff0c;可以在首尾插入或删除元素。 Queue的…

【C++】deque的用法

目录 一、容器适配器二、deque的介绍三、deque的使用及缺陷1、deque的构造函数2、deque的元素访问接口3、deque的 iterator的使用4、deque的增删查改4、deque的缺陷5、为什么选择deque作为stack和queue的底层默认容器 一、容器适配器 在了解deque前&#xff0c;我们先讲一讲什…

Python deque的用法介绍

Python deque的用法介绍 deque 是Python标准库 collections 中的一个类&#xff0c;实现了两端都可以操作的队列&#xff0c;相当于双端队列&#xff0c;与Python的基本数据类型列表很相似。 Python实现双端队列参考&#xff1a;https://blog.csdn.net/weixin_43790276/artic…

C++ deque的用法与示例

C deque的用法与示例 deque容器的介绍 Vector 容器是单向开口的连续内存空间&#xff0c;deque 则是一种双向开口的连续线性空间。所谓的双向开口&#xff0c;意思是可以在头尾两端分别做元素的插入和删除操作&#xff0c;当然&#xff0c;vector 容器也可以在头尾两端插入元…

deque用法详解

“无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。” deque函数&#xff1a; …

deque容器详解

文章目录 1. deque容器基本概念2. deque构造函数3. deque赋值操作4. deque大小操作5. deque插入和删除6. deque数据存取7. deque排序 1. deque容器基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部…

双端队列(Deque)

一、简介 deque&#xff0c;即双端队列(double ended queue)&#xff0c;是一种可以在两端扩展或收缩的序列化容器。 deque是C 标准模板库的一部分&#xff0c;想要使用deque&#xff0c;需要在程序中包含头文件deque。 #include<deque>二、定义和初始化 1.格式&#x…

关于Deque的详解

1. 定义 双向队列&#xff1a;支持插入删除元素的线性集合&#xff1b;java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 2. 和Queue的区别 Deque是double ended queue&#xff0c;将其理解成双端结束的队列&#xff0c;双端队列&#xff0c;可以在首尾插入或删除…

deque用法深度解析,一篇文章弄懂deque容器各种操作

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2022/01/11&#x1f4c5; 最近更新时间&#xff1a;2022/01/11&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…

未禁用nouveau导致Ubuntu安装Cuda的runfile安装方法出错:[ERROR]: Install of 455.32.00 failed, quitting

很多朋友在给Ubuntu&#xff08;Linux&#xff09;安装Cuda时&#xff0c;参考官方安装步骤导致安装出错&#xff1a; wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run sudo sh cuda_11.1.1_455.32.00_lin…

Ubuntu 安装 NVIDIA 显卡驱动详细步骤(ERROR: The Nouveau kernel driver is currently in use by your system)

1. 禁用 Nouveau 驱动 在禁用 Nouveau 驱动前我们先了解下它是啥&#xff1f;有什么作用。 Nouveau 是由第三方为 NVIDIA 显卡开发的一个开源 3D 驱动&#xff0c;也没能得到 NVIDIA 的认可与支持。虽然 Nouveau Gallium3D 在游戏速度上还远远无法和 NVIDIA 官方私有驱动相提…

Ubuntu 18.04 安装 nvidia 显卡驱动 离线安装 禁用 nouveau

Ubuntu 18.04 安装 nvidia 显卡驱动 离线安装 1 系统2 查看显卡2.1 更新 pci.ids 文件 3 安装显卡驱动 510.543.1 安装 nvtop 4 禁用 nouveau5 安装 cuda 11.6.15.1 设置环境变量 1 系统 # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description:…

[Ubuntu]:禁用nouveau、安装卸载NVIDIA CUDA及驱动(深度学习)

这里只针对Ubuntu的安装卸载&#xff0c;安装驱动方式的不同&#xff0c;卸载也有些许不同。通常有3种方式&#xff1a; 通过apt包管理工具来安装&#xff0c; 这样的方式好处是卸载安装的管理跟其他软件一致 通过.deb包来安装&#xff0c;这里就跳过apt&#xff0c;直接使用了…