精华内容
下载资源
问答
  • 目录 双向队列deque 头文件和命名空间 常用的成员函数 代码使用示例 示例执行结果 总结 双向队列deque 双向队列也是队列,是最为常见的一种数据结构,双向队列在STL中有deque的实现。包含双向队列在内,队列中的...

    在这里插入图片描述
    这篇文章介绍一下STL中队列deque的基本使用方法。


    双向队列deque

    双向队列也是队列,是最为常见的一种数据结构,双向队列在STL中有deque的实现。包含双向队列在内,队列中的元素满足FIFO(先进先出)。主要特点如下:

    • 元素需满足FIFO:First In First Out

    • 出口端称为队头(Front),入口端称为队尾(Rear)

    • 可以使用数组或者链表来存储数据

    • 操作主要有入队(Enqueue)和出队(Dequeue)

    • 可以根据需要实现循环队列或者双向队列

    • 只能在队尾插入数据,在队头删除数据

    • 关于队列的说明内容可参看:https://blog.csdn.net/liumiaocn/article/details/108091698

    头文件和命名空间

    #include <deque>
    using namespace std;

    常用的成员函数

    queue函数名用途功能说明时间复杂度
    size()查询遍历获取元素个数O(1)
    begin()查询遍历获取指向第一个元素的迭代器O(1)
    end()查询遍历获取指向最后一个元素的迭代器O(1)
    front()查询遍历获取指向第一个元素的迭代器O(1)
    back()查询遍历获取指向最后已给元素的迭代器O(1)
    push_back插入在末尾插入数据xO(1)
    pop_back删除删除最后一个元素O(1)
    push_front插入在末尾插入数据xO(1)
    pop_front删除删除最后一个元素O(1)
    empty删除删除所有元素O(n)

    注:deque的成员函数主要包括插入和删除,实际对应着队列操作的入队和出队两个操作,然后就是获取元素个数和对头元素的操作,都是负载度为O (1)的操作。和stack相比,上述5个函数的函数名只是front和top有区别,其他函数名一致。


    代码使用示例

    #include <iostream>
    #include <deque>
    using namespace std;
    
    void print_element(deque <char> q) {
        if (!q.empty()) {
            cout << "Size:" << q.size() << " Queue Top Element : " << q.back()  << " Queue:";
        } else {
            cout << "Size:" << q.size() << endl;
        }
    
        deque<char>::iterator it = q.begin();
        while(it != q.end()) cout << *it++;
        cout << endl;
    }
    
    int main() {
        deque <char> q;
    
        cout << "Queue Element In " << endl;
        print_element(q);
        q.push_back('L');
        print_element(q);
        q.push_back('i');
        print_element(q);
        q.push_back('u');
        print_element(q);
    
        cout << endl << "Queue Element Out " << endl;
        q.pop_back();
        print_element(q);
        q.pop_back();
        print_element(q);
        q.clear();
        print_element(q);
    
        q.push_back('i');
        print_element(q);
        q.push_front('L');
        print_element(q);
        q.push_back('u');
        print_element(q);
        q.pop_back();
        print_element(q);
        q.pop_front();
        print_element(q);
        q.pop_front();
        print_element(q);
    }
    

    示例执行结果

    Queue Element In 
    Size:0
    
    Size:1 Queue Top Element : L Queue:L
    Size:2 Queue Top Element : i Queue:Li
    Size:3 Queue Top Element : u Queue:Liu
    
    Queue Element Out 
    Size:2 Queue Top Element : i Queue:Li
    Size:1 Queue Top Element : L Queue:L
    Size:0
    
    Size:1 Queue Top Element : i Queue:i
    Size:2 Queue Top Element : i Queue:Li
    Size:3 Queue Top Element : u Queue:Liu
    Size:2 Queue Top Element : i Queue:Li
    Size:1 Queue Top Element : i Queue:i
    Size:0
    

    总结

    变长支持、泛化类型、常用功能函数内嵌、可以使用其他多种STL的函数、使用简单,而且也支持迭代器等,都是deque被使用的原因。

    展开全文
  • 关于双向队列

    2017-05-01 15:17:58
    #include #include #include #include #include using namespace std; int main() { deque d; d.push_back(1); d.push_back(2); d.push_back(3); d.push_front(10); d.push_front(20);
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<deque>
    using namespace std;
    int main()
    {
        deque<int> d;
        d.push_back(1);
        d.push_back(2);
        d.push_back(3);
        d.push_front(10);
        d.push_front(20);
        cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<" "<<d[3]<<" "<<d[4]<<endl;//书上有误,从前面插入并不覆盖,就是从前面插队了。
        d.insert(d.begin()+1,88);
        cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
        for(int i=0;i<d.size();i++)//以数组的方式输出。
        {
            cout<<d[i]<<" ";
        }
        cout<<endl;
        deque<int>::iterator it;
        for(it=d.begin();it!=d.end();it++)//以迭代器的方式便利。
        {
            cout<<*it<<endl;
        }
        deque<int>::reverse_iterator rit;
        for(rit=d.rbegin();rit!=d.rend();rit++)//反转一下;
        {
            cout<<*rit<<" ";
        }
        cout<<endl;
       /* while(!d.empty())
        {
            cout<<d.front()<<" ";//输出头部
            d.pop_front();//从头部删除。
        }
         while(!d.empty())
        {
            cout<<d.back()<<" ";//输出尾部。
            d.pop_back();//从尾部删除。
        }*/
        d.erase(d.begin()+1);//删除从0开始第一个位置。
         for(it=d.begin();it!=d.end();it++)//以迭代器的方式便利。
        {
            cout<<*it<<endl;
        }
        d.clear();//全请空;
        cout<<d.size();
       return 0;
    }
    

    展开全文
  • C++ 双向队列

    2020-03-17 19:02:26
    要使用 deque,需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。 deque 和 vector 有很多类似的地方。在 deque 中,随机存取任何元素都能在常数时间内完成。它相比于 vector 的优点是,vector 在...

    deque 也是顺序容器的一种,同时也是一个可变长数组。要使用 deque,需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。

    deque 和 vector 有很多类似的地方。在 deque 中,随机存取任何元素都能在常数时间内完成。它相比于 vector 的优点是,vector 在头部删除或添加元素的速度很慢,在尾部添加元素的性能较好,而 deque 在头尾增删元素都具有较好的性能(大多数情况下都能在常数时间内完成)。它有两种 vector 没有的成员函数:

    void push_front (const T & val);  //将 val 插入容器的头部
    void pop_front();  //删除容器头部的元素
    
    展开全文
  • list容器 list的介绍: ...双向队列,必须包含头文件 #include ,所有适用于vector的操作, 都适用于deque,deque还有 push_front (将元素插入到容器的头部),和 pop_front (删除头部的元素) 操作

    list容器

    list的介绍:
    list双向链表在任何位置的插入和删除为常数时间,不支持根据下标随机存取元素,具有所有顺序容器都有的成员函数。
    list的成员函数:
    push_front 在链表最前面插入
    pop_front 删除链表最前面的元素
    sort 排序 (list 不支持 STL 的算法 sort)
    remove 删除和指定值相等的所有元素
    unique 删除所有和前一个元素相同的元素
    merge 合并两个链表, 并清空被合并的链表
    reverse 颠倒链表
    splice 在指定位置前面插入另一链表中的一个或多个元素,
    并在另一链表中删除被插入的元素

    list的迭代器
    list容器之sort函数
    list容器的迭代器不支持完全随机访问
    不能用标准库中sort函数对它进行排序
    list自己的sort成员函数

    list<T> classname
    classname.sort(compare); //compare函数可以自己定义
    classname.sort(); //无参数版本, 按<排序
    

    list容器只能使用双向迭代器
    不支持大于/小于比较运算符, []运算符和随机移动
    (即类似 “list的迭代器+2” 的操作)

    deque 容器

    双向队列,必须包含头文件 #include ,所有适用于vector的操作, 都适用于deque,deque还有 push_front (将元素插入到容器的头部),和 pop_front (删除头部的元素) 操作

    展开全文
  • 要使用 deque,需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。 deque 和vector有很多类似的地方。在 deque 中,随机存取任何元素都能在常数时间内完成(但慢于vector)。它相比于 vector 的优点...
  • 线性表和栈分别是顺序存储结构和链式存储结构的代表,而队列和栈可以用以上两种数据结构进行表达,不过是把它们的成员函数加一改动,主要是限制为先进先出和后进先出的功能,本文主要介绍队列的顺序存储结构,这里...
  • 栈,队列,双向队列

    2021-03-23 10:25:51
    栈,队列,双向队列 栈:对于栈,有着较为简单的描述,即只可以从栈的最后面来进行进栈和出栈的操作,先进后出,后进先出。 头文件#include < stack > 定义方法:stack<栈中元素类型>栈的名字(这里为了...
  • 头文件 #include<deque> 用法 插入 头部插入 push_front 尾部插入 push_back() 插入元素elem到pos位置 iterator insert(pos,elem) 删除 删除头部的元素 pop_front() 删除尾部的元素 pop_back() ...
  • STL 中队列的使用(queue) 基本操作: push(x) 将x压入队列的末端 pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 front() 返回第一个元素(队顶元素) ...头文件:#include &lt;queu...
  • STL之双向队列

    2020-01-15 15:41:50
    双端队列(dequeue) 采用线性表顺序存储结构,且支持随机访问,即可以直接用下标来访问元素,顾名思义其是双向开口,可以快速在首尾插入、删除数据。 其头文件是<deque>,主要包含函数: push_back():在队尾压...
  • 这里是调用双核的方法哈,和我们单核使用的方法不兼容,因为有一些函数是不一样的,不通用,但是下一篇博文我会更一篇单核使用队列进行任务间通讯的问题 队列是什么? 队列是可以从一个任务向其他任务以并发安全的...
  • 头文件:#include&lt;deque&gt; (动态一维数组)定义:deque&lt;变量类型&gt; 变量名; 例:deque&lt;变量类型&gt; dq;特点:支持随机访问(数组访问下表从0开始;at方法访问,会抛出异常...
  • deque双向队列

    2017-06-20 12:46:07
    deque双向队列 对于双向队列,与队列queue以及vector容器的区别就在于,名字不同,...头文件: #include 函数: 构造/析构  dequeq 构造一个空的双向队列  dequeq(q1) 构造q,并复制q1  dequeq(n) 
  • STL中的双向队列deque

    2019-04-15 08:40:46
    1.STL中的双向队列deque deque也是顺序容器的一种,同时也是一个可变长数组。要使用deque,需要包含头文件deque。所有适用于vector的操作都适用于deque。 deque和vector有很多类似的地方。在deque中,随机存取任何...
  • C++ STL 知识点总结

    千次阅读 多人点赞 2019-01-13 18:22:29
    简单介绍:C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈等。 STL的一个重要特点就是数据结构...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    测试模型 H模型: H模型图 优点: 1 介入早 与开发并行 更早的发现问题 2 测试过程独立于开发过程 更客观 更主动 V模型 V模型图 ㈠需求阶段 产品经理,项目经理,产品工程师写《需求规格说明书》Software ...
  • C++标准库、C++标准模版库介绍

    多人点赞 2019-02-27 14:48:00
    注:每个库详细介绍以后... C++标准库(C++ Standard Library, 亦可称作,C++标准程序库)的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利用标准库完成。 基本介绍 C++标准库,C++ Standard Library,...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    在C或C++中这些定义一般放到头文件中,用#include语句来导入这个头文件。而在C#语言中使用using语句导入名字空间,using System语句意义是导入System名字空间,C#中的using语句的用途与C++中#include语句的用途基本...
  • 双向循环队列

    千次阅读 2016-09-18 14:37:12
    相信有了前面的基础我们可以很容易的实现单向循环队列需要引入我的链表的list.c和list.h头文件// // double_queue.h // double_queue // // Created by bikang on 16/9/12. // Copyright (c) 2016年 bikang. All ...
  • 头文件&定义2.默认优先输出大数据(1).举例3.优先输出小数据 即小顶堆(1).举例4.自定义优先级 重载默认的 < 符号(1).使用 funtion .(2). 自定义数据类型三.基本函数实现1.构造函数2.添加函数3.删除函数4....
  • 注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第...
  • 缓冲队列分为入口队列与出口队列,在访问两个队列之时,分别采用入口互斥元和出口互斥元。其优势在于当取出元素而出口队列为空时,访问两个队列才相互影响,如此便可以提高元素出入队列的效率。
  • C++基础 输入输出流及常用头文件

    千次阅读 2019-06-30 21:23:45
    #include cin和cout等函数所属的头文件 #include 动态内存分配所需函数,rand随机数函数所属头文件 #include 字符串函数头文件 #include 定义各种数据类型最值 #include 数学头文件,包含幂函数、指数函数、平方根...
  • 队列实现迷宫问题的求解; 3.实验代码: 队列实现 : ******************************************************************************************** 1 // maze_queue.cpp 2 #include 3 #...
  • c++各个头文件所包含常用函数

    千次阅读 多人点赞 2018-10-30 16:42:11
    c++各个头文件所包含常用函数 目录: 1.&lt;cstdlib&gt; 2.&lt;cctype&gt; 3.&lt;cstring&gt; 4.&lt;cmath&gt; 5.&lt;string&gt; 6.&lt;algorithm&gt; 7.&...
  • 实现了两种方式的队列,一种是顺序存储队列的实现,一种是链式存储的队列实现,代码中有针对两种实现方法的...两种实现方法函数在一个头文件中,顺序存储方式的函数名使用小写q开头,链式存储方式的函数使用大写Q开头
  • FreeRTOS

    千次阅读 多人点赞 2013-11-20 11:50:37
    任务和中断使用队列互相发送数据,并且使用信号灯和互斥来发送临界资源的使用情况。 ●硬件接口:接近9000行的代码拼凑起基本的FreeRTOS,是硬件无关的;相同的代码都能够运行,不论FreeRTOS是运行在不起眼的...
  • 目录 队列queue 头文件和命名空间 常用的成员函数 queue vs vector 代码使用示例 示例执行结果 总结 队列queue 队列也是最为常见的一种数据结构,队列中的元素满足FIFO(先进先出)。主要特点如下: 元素需满足FIFO...
  • LINUX C++ 线程池简单实现之双队列

    千次阅读 2016-06-03 20:59:21
     使用双队列的是因为在主线程非阻塞模式下,获取互斥锁时只能用try_lock的方式,从而不一定能获取到互斥锁,所以放任务时需要使用两个队列,当获取不到锁时就放入另一个队列,一个队列的任务执行完后,交换两队列;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,807
精华内容 5,922
关键字:

双队列头文件