全面了解STL Deque

STL(Standard Template Library)是C++语言的标准库,其中的deque(双端队列)是一个非常重要的容器。

一、deque基础

deque可以视作一个序列的集合,每个序列头尾相接而形成一个圆形缓冲区。它支持O(1)常数时间下以下操作:

  • 在序列前后插入元素
  • 在序列前后删除元素
  • 随机访问序列中的元素
  • 获取序列中元素的数量

deque使用动态数组存储元素,默认情况下在序列的前后各预留一定数量的空间,从而保证在插入或删除元素时在O(1)时间内完成。

#include 
#include 
using namespace std;
int main(){
    deque dq;
    dq.push_front(1);
    dq.push_back(2);
    dq.pop_front();
    dq.pop_back();
    dq.clear();
    dq.empty();
    dq.size();
}

二、insert和erase操作

deque提供了insert和erase操作,用于在序列中插入和删除元素,这两个操作非常强大。

(一)insert操作

insert操作有以下几种形式:

  • 在指定位置插入单个元素
  • 在指定位置插入n个相同的元素
  • 在指定位置插入区间[first, last)内的元素
#include 
#include 
using namespace std;
int main(){
    deque dq {1,2,3,4};
    auto it = dq.begin() + 2;
    dq.insert(it, 5);    // 1 2 5 3 4
    
    dq.insert(it, 2, 6); // 1 2 6 6 5 3 4
    
    vector v {7,8};
    dq.insert(it, v.begin(), v.end());    // 1 2 7 8 6 6 5 3 4
}

(二)erase操作

erase操作有以下几种形式:

  • 删除指定位置的单个元素
  • 删除区间[first, last)内的元素
  • 删除所有元素
#include 
#include 
using namespace std;
int main(){
    deque dq {1,2,3,4};
    auto it = dq.begin() + 2;
    dq.erase(it);   // 1 2 4
    
    dq.erase(it, dq.end()); // 1 2
    
    dq.clear(); // 空序列
}

三、deque和vector的比较

deque和vector都是STL提供的序列容器,它们的最大区别在于存储结构不同,因而导致不同的性能表现。

vector使用连续的动态数组存储元素,支持在序列末尾追加元素,但是在序列头部或中间插入或删除元素的代价较大。

deque使用的是一种双层结构,底层是一个数组的指针序列,每个指针指向一个动态数组,上层提供了更为方便的接口。由于deque采用了类似于虚拟内存的方式,因此其无论在序列首尾或中间插入或删除元素的代价都是O(1)的,除此之外,deque还支持高效地在序列两端执行插入和删除操作。

#include 
#include 
#include 
#include 
using namespace std;
int main(){
    deque dq;
    vector v;
    auto t1 = chrono::high_resolution_clock::now();
    for(int i=0;i<100000;i++)
        dq.push_back(i);
    auto t2 = chrono::high_resolution_clock::now();
    for(int i=0;i<100000;i++)
        v.push_back(i);
    auto t3 = chrono::high_resolution_clock::now();
    cout << "deque push_back: " << chrono::duration_cast(t2-t1).count() << "ms" << endl;
    cout << "vector push_back: " << chrono::duration_cast(t3-t2).count() << "ms" << endl;
}

四、总结

deque在实际运用中表现出的优异性能和灵活性使其成为STL中重要的序列容器之一,我们可以根据需要灵活地选择存储结构相对固定的vector或者支持高效操作的deque作为容器。通过深入了解deque的相关函数和性能表现,能够更加灵活和高效地应用它来解决我们的问题。

原创文章,作者:NCFPP,如若转载,请注明出处:https://www.506064.com/n/368882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NCFPPNCFPP
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相关推荐

  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • Python zscore函数全面解析

    本文将介绍什么是zscore函数,它在数据分析中的作用以及如何使用Python实现zscore函数,为读者提供全面的指导。 一、zscore函数的概念 zscore函数是一种用于标…

    编程 2025-04-29
  • 全面解读数据属性r/w

    数据属性r/w是指数据属性的可读/可写性,它在程序设计中扮演着非常重要的角色。下面我们从多个方面对数据属性r/w进行详细的阐述。 一、r/w的概念 数据属性r/w即指数据属性的可读…

    编程 2025-04-29
  • Python计算机程序代码全面介绍

    本文将从多个方面对Python计算机程序代码进行详细介绍,包括基础语法、数据类型、控制语句、函数、模块及面向对象编程等。 一、基础语法 Python是一种解释型、面向对象、动态数据…

    编程 2025-04-29
  • Matlab二值图像全面解析

    本文将全面介绍Matlab二值图像的相关知识,包括二值图像的基本原理、如何对二值图像进行处理、如何从二值图像中提取信息等等。通过本文的学习,你将能够掌握Matlab二值图像的基本操…

    编程 2025-04-28
  • 疯狂Python讲义的全面掌握与实践

    本文将从多个方面对疯狂Python讲义进行详细的阐述,帮助读者全面了解Python编程,掌握疯狂Python讲义的实现方法。 一、Python基础语法 Python基础语法是学习P…

    编程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常见的一个概念,是我们在编程中经常用到的一个变量类型。Python是一门强类型语言,即每个变量都有一个对应的类型,不能无限制地进行类型间转换。在本篇…

    编程 2025-04-28
  • Zookeeper ACL 用户 anyone 全面解析

    本文将从以下几个方面对Zookeeper ACL中的用户anyone进行全面的解析,并为读者提供相关的示例代码。 一、anyone 的作用是什么? 在Zookeeper中,anyo…

    编程 2025-04-28
  • Python合集符号全面解析

    Python是一门非常流行的编程语言,在其语法中有一些特殊的符号被称作合集符号,这些符号在Python中起到非常重要的作用。本文将从多个方面对Python合集符号进行详细阐述,帮助…

    编程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一个高效的轻量级Web框架,为开发者提供了简单易用的API和丰富的工具,可以快速构建Web应用程序。在本文中,我们将从多个方面阐述Switchlight的特…

    编程 2025-04-28

发表回复

登录后才能评论