news 2026/10/27 21:31:33

STL容器——deque容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STL容器——deque容器

deque容器

  • 'double-ended queue’的缩写,和vector一样都是STL的容器
  • deque是双端数组,可以对头部进行插入删除操作,相较于vector多了头插头删的操作以及front()和back(),后面这两个分别表示容器的第一个元素和最后一个元素,并不是迭代器,调用会得到具体值

deque与vector的区别:

  1. vector对于头部的插入删除效率低,数据量越大,效率越低
  2. deque相对而言,对头部的插入删除速度会比vector快
  3. vector访问元素时的速度会比deque快,这和两者内部实现有关

函数原型

deque deq;功能
deque deq;其中T是泛型,用来存放数据类型,这是默认构造函数,较为常用
deque(deq.begin(), deq.end());将[deq.begin(),deq.end)前闭后开的区间内的元素拷贝给本身容器
deque(n,elem);构造函数将n个elem值拷贝给本身容器
deque(const deque &ans);拷贝构造函数

代码示例

#include<iostream>usingnamespacestd;#include<deque>voidprintDeque(constdeque<int>&d)//只读容器不可改{//迭代器变为 const_iteratorfor(deque<int>::const_iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;}voidtset1(){//默认构造deque<int>d1;for(inti=0;i<10;i++){d1.push_back(i);}printDeque(d1);//区间构造deque<int>d2(d1.begin(),d1.end());printDeque(d2);//赋值构造deque<int>d5(7);printDeque(d5);//赋值构造deque<int>d3(7,5);printDeque(d3);//拷贝构造deque<int>d4(d3);printDeque(d4);}intmain(){test1();system("pause");return0;}

赋值

  • deque& operator=(const deque &ans);重载赋值操作符
  • assign(be,en);将[be,en);将[be,en)区间内的数组拷贝赋值给自己
  • assign(n,elem);将n个elem拷贝赋值给自己
voidtestb(){deque<int>d1;for(inti=0;i<10;i++){d1.push_back(i);}//第一种deque<int>d2=d1;//第二种deque<int>d3;d3.assign(d1.begin(),d1.end());//第三种deque<int>d4;d4.assign(6,88);//测试:printDeque(d2);printDeque(d3);printDeque(d4);}

容器大小

对deque的大小进行操作

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

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

deque.resize(m);重新指定容器长度为num,容器变长以默认值填充,容器变短则超出部分删除

deque.resize(m,elem);同上,区别是默认值填充变为elem

注意deque没有容量概念

判断是否为空——empty

返回元素个数——size

重新指定个数——reseize

插入和删除

  • 两端操作:

    • push_back(e);尾插
    • push_front(e);头插
    • pop_back();尾删
    • pop_front();头删
  • 指定位置:

    • insert(const_iterator pos,e);迭代器指向位置pos插入指定元素e

    • insert(const_iterator pos,int count ,e);插入count个指定元素e

    • insert(const_iterator pos,beg,en);插入指定区域的元素

    • erase(const_iterator pos);删除迭代器指向的元素

    • erase(const_iterator begin,const_iterator end);删除迭代器从begin到end之间的元素

    • clear();清空容器内所有元素

//两端操作voidtest01(){deque<int>d1;//尾插d1.push_back(10);d1.push_back(20);//头插d1.push_front(100);d1.push_front(200);PrintDeque(d1);//尾删d1.pop_back();PrintDeque(d1);//头删d1.pop_front();PrintDeque(d1);}voidtest02(){deque<int>d2;//尾插d2.push_back(10);d2.push_back(20);//头插d2.push_front(100);d2.push_front(200);PrintDeque(d2);//insert插入d2.insert(d2.begin(),1000);PrintDeque(d2);d2.insert(d2.begin(),2,10000);PrintDeque(d2);//按照区间进行插入deque<int>d3;d3.push_back(1);d3.push_back(2);d3.push_back(3);d2.insert(d2.begin(),d3.begin(),d3.end());PrintDeque(d2);}voidtest03(){deque<int>d4;//尾插d4.push_back(10);d4.push_back(20);//头插d4.push_front(100);d4.push_front(200);PrintDeque(d4);//删除deque<int>::iterator it=d4.begin();it++;d4.erase(it);PrintDeque(d4);//按照区间方式删除d4.erase(d4.begin(),d4.end());PrintDeque(d4);//清空d4.clear();PrintDeque(d4);}

数据存取

  • 对deque中的元素进行存取操作

函数原型:

  • at(int dex);返回索引dex所指的数据

  • operator[];同上

  • front();返回容器中第一个数据

  • back();返回容器中最后一个数据

    //通过[]方式访问元素
    for (int i = 0; i < d1.size(); i++)
    {
    cout << d1[i] << " ";
    }
    cout << endl;
    //通过at方式访问元素
    for (int i = 0; i < d1.size(); i++)
    {
    cout << d1.at(i) << " ";
    }

排序

  • 需要引入头文件:<algorithm>
  • 利用算法实现对deque容器的排序
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 12:49:44

详细分析一下 国富论里里面 十一章 论 地租

《国富论》第十一章《论地租》&#xff08;Of the Rent of Land&#xff09;是亚当斯密对土地收入性质的系统性分析&#xff0c;属于其分配理论的重要组成部分。本章在斯密的理论体系中具有承上启下的作用&#xff0c;既延续了对生产要素报酬&#xff08;工资、利润、地租&…

作者头像 李华
网站建设 2026/10/27 4:53:03

现在 夸脱小麦 多少 盎司白银

根据当前的国际市场价格数据&#xff0c;1夸脱小麦约相当于0.24盎司白银。这个比例与您在《国富论》中读到的历史数据&#xff08;如14世纪约4盎司白银/夸脱&#xff09;相比&#xff0c;已经发生了巨大变化。下面是根据最新市场数据进行的计算和对比分析&#xff1a;&#x1f…

作者头像 李华
网站建设 2026/10/27 4:40:31

Java Web html 图书管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展&#xff0c;图书管理系统在图书馆、学校及企业中的应用日益广泛&#xff0c;传统的手工管理模式已无法满足高效、精准的管理需求。数字化图书管理系统能够实现图书信息的快速检索、借阅记录的自动化管理以及用户权限的精细化控制&#xff0c;极大地…

作者头像 李华
网站建设 2026/10/27 2:24:45

半光滑牛顿法非线性优化带35个测试函数 半光滑牛顿法求解非线性目标函数约束优化问题的MATLA...

半光滑牛顿法非线性优化带35个测试函数 半光滑牛顿法求解非线性目标函数约束优化问题的MATLAB自编源代码&#xff0c;不调用MATLAB优化库函数&#xff0c;每个函数开头有简单英语注释&#xff0c;求解速度比MATLAB自带优化库函数快。 目标函数支持非线性目标函数、二次型函数等…

作者头像 李华
网站建设 2026/10/27 3:56:02

C 标准库 - `<math.h>`

C 标准库 - <math.h> 引言 在 C 语言编程中,数学运算是一项基本且重要的操作。《math.h》头文件提供了丰富的数学函数,用于处理各种数学问题。本文将详细介绍 <math.h> 标准库中的函数、使用方法以及注意事项。 1. <math.h> 函数概述 <math.h> 头…

作者头像 李华
网站建设 2026/10/26 6:38:47

【AUTOSAR AP CorAUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型

目录标题 AUTOSAR AP 错误处理与返回值规范:ErrorCode / ErrorDomain / Result / Exception / Violation 的工程化选型 1. 错误分类先行:把“失败”拆成 4 种语义 1.1 Error:可恢复、属于 API 的正常输出域 1.2 Violation:断言级失败、不可恢复 1.3 Corruption:系统资源被…

作者头像 李华