码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++基础知识(十五)--- deque 容器


    目录

    deque 迭代器:

    deque 容器实现原理:

    deque 常用API:

    1. deque 构造函数

    2. deque 赋值操作

    3. deque 大小操作

    4. deque 返回操作

    5. deque 双端插入和删除操作 

    6. deque 插入和删除操作


    vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空间。

    所谓的双向开口,是可以在头尾两端分别做元素的插入和删除操作。

    其实 vector 容器也可以在头尾两端插入元素,但效率不高。

    deque 迭代器:

    随机迭代器。除非有必要,尽可能使用 vector。

    deque 容器实现原理:

    deque 容器逻辑上是连续的存储空间,这让我们想到 array 和 vector 。array 无法增长,vector 只能向尾端增长(假增长:申请更大空间、原数据复制至新空间、释放原空间),并且每次配置新的空间都有余裕。

    实际上,deque 容器是由一段一段定量的块空间通过中央控制连起来的。一旦需要在deque 前端或尾端增加新的空间,便配置一段连续定量的空间,串接在deque 的头端或尾端。

    deque 采用一块所谓的 map(不是STL的 map 容器)作为主控,来维持整体连续的假象。这个 map 是一小块连续的内存空间,其中每个元素(结点)都是一个指针,指向另一段连续内存空间,称作缓冲区。缓冲区才是 deque 存储空间的主体。

     

    deque 常用API:

    1. deque 构造函数

    1. deque deq; //默认构造形式
    2. deque(begin, end); //构造函数将[begin, end)区间中的元素拷贝给本身
    3. deque(n, elem); //构造函数将n个elem拷贝给本身
    4. deque(const deque &deq); //拷贝构造函数

    2. deque 赋值操作

    1. assign(begin, end); //将[begin, end)区间中的数据拷贝赋值给本身。
    2. assign(n, elem); //将n个elem拷贝赋值给本身。
    3. deque& operator=(const deque &deq); //重载等号操作符
    4. swap(deq); // 将deq与本身的元素互换

    3. deque 大小操作

    1. deque.size(); //返回容器中元素的个数
    2. deque.empty(); //判断容器是否为空
    3. deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
    4. //如果容器变短,则末尾超出容器长度的元素被删除。
    5. deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,
    6. //如果容器变短,则末尾超出容器长度的元素被删除。

    4. deque 返回操作

    1. at(idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range。
    2. operator[]; //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
    3. front(); //返回第一个数据。
    4. back(); //返回最后一个数据

    5. deque 双端插入和删除操作 

    1. push_back(elem); //在容器尾部添加一个数据
    2. push_front(elem); //在容器头部插入一个数据
    3. pop_back(); //删除容器最后一个数据
    4. pop_front(); //删除容器第一个数据

    6. deque 插入和删除操作

    1. insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
    2. insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值
    3. insert(pos,begin,end); //在pos位置插入[begin,end)区间的数据,无返回值
    4. clear(); //移除容器的所有数据
    5. erase(begin,end); //删除[begin,end)区间的数据,返回下一个数据的位置
    6. erase(pos); //删除pos位置的数据,返回下一个数据的位置

     

     

  • 相关阅读:
    【python】linux系统python报错“ssl module in Python is not available”
    java计算机毕业设计基于安卓Android的健康管理APP
    Pycharm中配置Celery启动
    芝浦工业大学利用 NetApp 提供的多层 AI 驱动型安全解决方案抵御网络攻击
    【JavaWeb】阿里的德鲁伊和c3p0
    “蔚来杯“2022牛客暑期多校训练营5 D题: Birds in the tree
    Bogus 实战:使用 Bogus 和 EFCore 生成模拟数据和种子数据【完整教程】
    性能优化:跨服务使用分布式缓存的3个思考
    Module Analyser 使用操作说明 第Ⅱ部分
    天池AI练习生计划 - 第一期Pyhton入门与实践 正式上线!通关赢取双重礼品!
  • 原文地址:https://blog.csdn.net/woshizuopie/article/details/126150201
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号