STL容器deque 的常用功能和操作

2024-08-30 06:12

本文主要是介绍STL容器deque 的常用功能和操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 C++ 的标准模板库(STL)中,std::deque(双端队列)是一种非常灵活且高效的容器。它允许在两端进行快速的插入和删除操作,非常适合需要在两端频繁操作的数据结构场景。与 std::vector 不同,std::deque 不是一个连续内存块的容器,而是由多个内存块构成,这使得它在两端操作时非常高效

目录

deque的常见创建方式

deque常用成员函数

 std::deque 的应用场景


deque的常见创建方式

#include <deque>
#include <iostream>
#include <vector>int main() {// 1. 创建一个空的 dequestd::deque<int> dq1;// 2. 创建一个包含 5 个元素的 deque,每个元素的值为 10std::deque<int> dq2(5, 10);for (int value : dq2) {std::cout << value << " "; // 输出:10 10 10 10 10}std::cout << std::endl;// 3. 使用初始化列表创建 dequestd::deque<int> dq3{1, 2, 3, 4, 5};for (int value : dq3) {std::cout << value << " "; // 输出:1 2 3 4 5}std::cout << std::endl;// 4. 从另一个 deque 复制构造std::deque<int> dq4(dq3);for (int value : dq4) {std::cout << value << " "; // 输出:1 2 3 4 5}std::cout << std::endl;// 5. 从 vector 的迭代器范围创建 dequestd::vector<int> vec{1, 2, 3, 4, 5};std::deque<int> dq5(vec.begin(), vec.end());for (int value : dq5) {std::cout << value << " "; // 输出:1 2 3 4 5}std::cout << std::endl;// 6. 使用移动构造函数创建 dequestd::deque<int> dq6{1, 2, 3, 4, 5};std::deque<int> dq7(std::move(dq6)); // 移动构造函数for (int value : dq7) {std::cout << value << " "; // 输出:1 2 3 4 5}std::cout << std::endl;return 0;
}

deque常用成员函数

  • push_front(const T& value):在双端队列的前面插入元素。

    dq.push_front(1); // 在队列前面插入 1
    
  • push_back(const T& value):在双端队列的后面插入元素。

    dq.push_back(2); // 在队列后面插入 2
    
  • pop_front():删除双端队列的第一个元素。

    dq.pop_front(); // 删除第一个元素
    
  • pop_back():删除双端队列的最后一个元素。

    dq.pop_back(); // 删除最后一个元素
    
  • front():访问双端队列的第一个元素。

    int first = dq.front(); // 获取第一个元素
    
  • back():访问双端队列的最后一个元素。

    int last = dq.back(); // 获取最后一个元素
    
  • at(size_t pos):访问指定位置的元素,带边界检查。

    int element = dq.at(2); // 获取第 3 个元素(索引从 0 开始)
    
  • size():返回双端队列中元素的个数。

    size_t n = dq.size(); // 获取元素个数
    
  • empty():检查双端队列是否为空。

    bool isEmpty = dq.empty(); // 如果为空则返回 true
    
  • clear():清空双端队列中的所有元素。

    dq.clear(); // 清空所有元素
    
  • begin() 和 end():返回指向容器起始和结束的迭代器。

    auto it = dq.begin(); // 指向第一个元素
    auto it_end = dq.end(); // 指向最后一个元素之后
    
  • rbegin() 和 rend():返回反向迭代器,用于从后向前遍历。

    auto rit = dq.rbegin(); // 指向最后一个元素
    auto rit_end = dq.rend(); // 指向第一个元素之前
    

 std::deque 的应用场景

  • 双端队列:当需要从两端进行高效的插入和删除操作时,如实现双端队列(deque)或队列(queue)数据结构。

  • 缓存机制:在实现缓存机制时,可能需要在数据结构的两端频繁地插入和删除元素,std::deque 可以提供有效的支持。

  • 移动窗口算法:在某些算法中,如滑动窗口技术,std::deque 能够提供灵活的窗口操作。

这篇关于STL容器deque 的常用功能和操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120012

相关文章

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

一文详解Java常用包有哪些

《一文详解Java常用包有哪些》包是Java语言提供的一种确保类名唯一性的机制,是类的一种组织和管理方式、是一组功能相似或相关的类或接口的集合,:本文主要介绍Java常用包有哪些的相关资料,需要的... 目录Java.langjava.utiljava.netjava.iojava.testjava.sql

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE