C++STL---deque常见用法

C++ STL中的deque

deque(双端队列)是C++标准模板库(STL)中的一个序列容器,它允许在容器的前端和后端快速插入和删除元素。与vector相比,deque提供了更灵活的数据结构,特别适合于需要频繁在两端操作元素的场景。

基本操作
  1. 创建和初始化

    #include <deque>
    std::deque<int> d1; // 创建一个空的deque
    std::deque<int> d2(5, 10); // 创建一个大小为5的deque,每个元素初始化为10
    std::deque<int> d3 = {1, 2, 3, 4, 5}; // 初始化列表
    ``` 
  2. 访问元素

    • at(index)operator[]:访问指定位置的元素,at会检查索引范围。
    • front()back():访问第一个和最后一个元素。
    int first = d3.front(); // 1
    int last = d3.back(); // 5
    int element = d3.at(2); // 3
    
  3. 修改元素

    • push_back(value)push_front(value):在deque的末尾或开头添加一个元素。
    • pop_back()pop_front():移除deque的最后一个或第一个元素。
    • insert(position, value):在指定位置插入一个元素。
    • erase(position)erase(start, end):删除一个或多个元素。
    • clear():清空所有元素。
    d3.push_back(6); // d3: {1, 2, 3, 4, 5, 6}
    d3.push_front(0); // d3: {0, 1, 2, 3, 4, 5, 6}
    d3.pop_back(); // d3: {0, 1, 2, 3, 4, 5}
    d3.pop_front(); // d3: {1, 2, 3, 4, 5}
    d3.insert(d3.begin() + 2, 99); // d3: {1, 2, 99, 3, 4, 5}
    d3.erase(d3.begin() + 2); // d3: {1, 2, 3, 4, 5}
    
  4. 大小和容量

    • size():返回当前元素的数量。
    • resize(n):改变deque的大小,多出的元素会被初始化。
    size_t num_elements = d3.size(); // 5
    d3.resize(7, 100); // d3: {1, 2, 3, 4, 5, 100, 100}
    
  5. 遍历

    • 使用范围for循环或迭代器。
    for (int x : d3) std::cout << x << " ";
    for (auto it = d3.begin(); it != d3.end(); ++it) std::cout << *it << " ";
    
相关算法

vector类似,deque也可以与STL中的算法库配合使用。

  1. 排序

    • 由于deque不保证所有元素在连续的内存空间,某些对内存连续性有要求的算法(如std::sort)需要注意使用。
    #include <algorithm>
    std::sort(d3.begin(), d3.end()); // 对deque进行排序
    
  2. 查找

    auto it = std::find(d3.begin(), d3.end(), 3);
    if (it != d3.end()) {std::cout << "Element found: " << *it << std::endl;
    }
    
  3. 计数

    int count = std::count(d3.begin(), d3.end(), 3);
    
  4. 删除特定元素

    • 使用eraseremove组合来删除特定元素。
    d3.erase(std::remove(d3.begin(), d3.end(), 3), d3.end());
    
  5. 遍历并执行操作

    std::for_each(d3.begin(), d3.end(), [](int& x){ x *= 2; });
    

deque是一个非常灵活的容器,适用于需要频繁在两端插入或删除元素的场景。通过结合STL的算法,可以有效地管理和处理存储在deque中的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

期权高频交易能做吗?期权可以频繁交易吗?

今天带你了解期权高频交易能做吗&#xff1f;期权可以频繁交易吗&#xff1f;在期权交易市场&#xff0c;大部分人都知道不能频繁交易&#xff0c;就连不少投资新手都知道频繁交易是大忌&#xff0c;是错误的&#xff0c;是应该避免的。所以是不行的。 期权高频交易能做吗&…

智慧公安大数据研判工具(十八)

智慧公安以大数据、云计算、人工智能、物联网和移动互联网技术为支撑&#xff0c;以“打、防、管、控”为目的&#xff0c;综合研判为核心&#xff0c;共享信息数据资源&#xff0c;融合业务功能&#xff0c;构建公安智慧大数据平台&#xff0c;实现公安信息数字化、网络化和智…

阿里云搭建物联网平台+MQTT.fx接入阿里云

文章目录 本篇介绍一、阿里云物联网平台搭建二 、MQTT客户端接入阿里云物联网平台总结 本篇介绍 本篇搭建了阿里云物联网平台&#xff0c;使用MQTT.fx接入阿里云&#xff0c;上传温湿度数据 使用到的软件&#xff1a;阿里云、MQTT.fx 一、阿里云物联网平台搭建 首先创建一个物…

MinIO 使用

MinIO自建对象存储 1、dock-compose 使用dock-compose拉取 minio:image: "minio/minio"container_name: minioports:- "9000:9000"- "9001:9001"volumes:- "./minio/data1:/data1"- "./minio/data2:/data2"restart: on-fai…

go语言方法之方法值和方法表达式

我们经常选择一个方法&#xff0c;并且在同一个表达式里执行&#xff0c;比如常见的p.Distance()形式&#xff0c;实际上 将其分成两步来执行也是可能的。p.Distance叫作“选择器”&#xff0c;选择器会返回一个方法"值"->一 个将方法(Point.Distance)绑定到特定接…

从 AdaBoost 到随机森林:深入解析集成学习方法【集成学习】

集成学习的思想 集成学习是一种通过组合多个基学习器&#xff08;弱学习器&#xff09;来提高模型预测性能的机器学习方法。集成学习的思想类似于谚语“三个臭皮匠&#xff0c;顶个诸葛亮”&#xff0c;即通过集成多个表现较差的学习器&#xff0c;可以获得一个强大的整体模型…

从0开发一个Chrome插件:测试项目效果

前言 这是《从0开发一个Chrome插件》系列的第五篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必要…

Glow模型【图解版加代码】

论文&#xff1a;Glow: Generative Flow with Invertible 1x1 Convolutions 代码&#xff1a;pytorch版本&#xff1a;rosinality/glow-pytorch: PyTorch implementation of Glow (github.com) 正版是TensorFlow版本 openai的 参考csdn文章&#xff1a;Glow-pytorch复现gith…

Cobalt_Strike(CS)渗透工具安装使用到免杀上线

Cobalt_Strike&#xff08;CS&#xff09;安装到免杀上线 原文链接&#xff1a; cs免杀上线 点我 https://mp.weixin.qq.com/s?__bizMzkxNDY5NzMxNw&amp;mid2247483862&amp;idx1&amp;snc6b4da3ce5772a075431098227397baa&amp;chksmc16b3cdcf61cb5ca06f61513…

以sqlilabs靶场为例,讲解SQL注入攻击原理【18-24关】

【less-18】 打开时&#xff0c;获取了自己的IP地址。&#xff0c;通过分析源码知道&#xff0c;会将用户的user-agent作为参数记录到数据库中。 提交的是信息有user-Agent、IP、uname信息。 此时可以借助Burp Suite 工具&#xff0c;修改user_agent&#xff0c;实现sql注入。…

力扣14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&#xff1a; 输…

数字水印 | 盲水印嵌入:量化索引机制 QIM

目录 1 什么是量化索引调制&#xff1f;1.1 为什么使用 QIM&#xff1f;1.2 QIM 的算法思想1.3 什么是量化操作&#xff1f;1.4 论文中对 QIM 的介绍 2 盲水印论文中的实际应用2.1 均匀量化器2.2 对论文的分析 &#x1f607;前言&#xff1a;不知道为什么&#xff0c;Q…

Windows下如何把Oracle从C盘整体迁移到D盘?

&#xff08;一&#xff09;写这篇文章的起因 这篇文章适合刚接触的技术小白follow操作&#xff0c;整理文章不易&#xff0c;大家多多点赞转发 起因是昨天有会员在群里发问&#xff0c;客户要把Oracle整个目录从C盘挪到D盘怎么弄 客户那边的人把Oracle整个程序数据文件都安装…

【C++】vector的模拟实现

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 1. vector的核心框架接口 2. 构造函数 2.1 基本构造 2.2 拷贝构造&#xff08;传统写法&#xff09; 2.3 析构函数 2…

《python》poetry install下载缓慢,网络问题断开连接--poetry换源镜像下载

在使用打包工具poetry进行打包的是出现了一个问题就是&#xff0c;在使用poetry进行打包的时候出现了&#xff0c;连接断开这样的问题&#xff0c;这个问题是可以通过换源&#xff0c;通过国内的镜像来解决这个问题就可以了。 找到项目中的pyoroject。toml文件这个文件中写了一…

02-2.3.2_2 单链表的查找

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏&#xff0c;今后还会不断更新。 此外&#xff0c;《程序员必备技能》专栏和《程序员必备工具》专栏&#xff08;该专栏暂未开设&#xff09;日后会逐步更新&#xff0c;感兴趣的小伙伴可以点一下订阅、收藏、关注&#xff01; 谢…

FJSP:蛇鹫优化算法(SBOA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

详细介绍 FJSP&#xff1a;蛇鹫优化算法&#xff08;Secretary bird optimization algorithm&#xff0c;SBOA&#xff09;求解柔性作业车间调度问题&#xff08;FJSP&#xff09;&#xff0c;提供MATLAB代码-CSDN博客 完整MATLAB代码 FJSP&#xff1a;蛇鹫优化算法&#xff…

设计模式(十三)行为型模式---命令模式(command)

文章目录 命令模式简介结构UML图具体实现UML图代码实现 命令模式简介 命令模式&#xff08;command pattern&#xff09;也叫动作模式或者事务模式。它是将请求&#xff08;命令&#xff09;封装成对象&#xff0c;使得可以用不同的请求对客户端进行参数化&#xff0c;具体的请…

梯度下降: 01.原理与代码实操

1. 简介 梯度下降法(GradientDescent) 算法,不像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法(都是无约束最优化问题)求解出最优解,所谓的通用就是很多机器学习算法都是用梯度下降,甚至深度学习也是用它来求解最优解。…

区块链--Ubuntu上搭建以太坊私有链

1、搭建私链所需环境 操作系统&#xff1a;ubuntu16.04&#xff0c;开虚拟机的话要至少4G&#xff0c;否则会影响测试挖矿时的速度 软件&#xff1a; geth客户端 Mist和Ethereum Wallet&#xff1a;Releases ethereum/mist GitHub 2、安装geth客户端 sudo apt-get update …