zoukankan      html  css  js  c++  java
  • STL之双向队列(dequeue)

    //双向队列 deque
    #include <deque>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int main()
    {
    deque<int> ideq(20);//Create a deque ideq with 20 elements of default value 0
    deque<int>::iterator pos;
    int i;


    for (i = 0; i < 20; ++i)//一开始它们的初值都是0
    printf("%d ", ideq[i]);
    putchar(' ');

    //使用assign()赋值 assign在计算机中就是赋值的意思
    for (i = 0; i < 20; ++i)
    ideq[i] = i;

    //输出deque
    printf("输出deque中数据: ");
    for (i = 0; i < 20; ++i)
    printf("%d ", ideq[i]);
    putchar(' ');

    //在头尾加入新数据
    printf(" 在头尾加入新数据... ");
    ideq.push_back(100);
    ideq.push_front(i);

    //输出deque
    printf(" 输出deque中数据: ");
    for (pos = ideq.begin(); pos != ideq.end(); pos++)
    printf("%d ", *pos);
    putchar(' ');

    //查找
    const int FINDNUMBER = 19;
    printf(" 查找%d ", FINDNUMBER);
    pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
    if (pos != ideq.end())
    printf("find %d success ", *pos);
    else
    printf("find failed ");

    //在头尾删除数据
    printf(" 在头尾删除数据... ");
    ideq.pop_back();
    ideq.pop_front();

    //输出deque
    printf(" 输出deque中数据: ");
    for (pos = ideq.begin(); pos != ideq.end(); pos++)
    printf("%d ", *pos);
    putchar(' ');
    return 0;
    }

    以上代码是一个演示qwq;

    deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面就总结一下deque的常用成员函数:

    (本人技术水平比较差,列不全请见谅qwq)

    这是基础操作:

    deque<int> c(20); //建立一个int类型的有20位的双向队列
    
    c.front() //返回该双向队列的第一个数据
    
    c.back() //返回该双向队列的最后一个数据
    
    c.empty()  //判断该循环队列是否为空
    
    c.maxsize()  //返回循环队列中最大数据的数量
    
    c.size()   //返回循环队列实际元素的个数
    
    c.begin()   //这是指向该双向队列第一个数据的迭代器
    
    c.end()   //这是指向该双向队列最后一个数据的迭代器
    
    c.rbegin() //指向逆向队列的第一个数据
    
    c1.swap(c2)    //将c1与c2的元素互换
    swap(c1,c2)    //同上
    
    c.rend()  //指向逆向队列最后一个位置的下一个位置的迭代器

    这是添加操作:

    c.push_front()   //在头部插入一个数据
    
    c.push_back()   //在尾部插入一个数据
    
    c.insert(pos,x)   //在pos位置插入一个x的拷贝,并返回新数据的位置
    
    c.insert(pos,begin,end)   //在pos位置插入在[begin,end)之间的数据,无返回值
    
    c.pop_back()  //删除最后一个数据
    
    c.pop_front()  //删除第一个数据
    
    c.erase(pos)   //删除pos位置的数据,并返回下一个位置的迭代器
    
    x.erase(begin,end)  //删除[begin,end)区间的数据,返回下一个数据的位置

    但是不知道是什么玄学原因,deque的随机访问和遍历数据相比而言会比vector慢一些;

    但是我不会呐qwq,因为我弱qwq。

    好哒,写完撒花(qwq)

  • 相关阅读:
    SQL Server profile使用技巧
    Java 十进制和十六制之间的转化(负数的处理)
    Step By Step(Lua调用C函数)
    Python、Lua和Ruby之优劣
    C++注释规范
    树莓派、 Arduino 、传统单片机开发板该如何选择?
    正则表达式
    python 读写文件
    python连接Oracle数据库
    MySQL获取Schema表名和字段信息
  • 原文地址:https://www.cnblogs.com/lyp-Bird/p/10390476.html
Copyright © 2011-2022 走看看