• Cpp浅析系列-STL之deque


    前言

    双端队列的元素可以从两端弹出,其限定插入和删除操作都可以在表的两端进行。

    相比于队列,双端队列就好在允许双端操作这里了。

    CPP

    Deque

    定义

    1. #include <deque>
    2. using namespace std;
    3. // 定义一个空对象
    4. deque<int> deque0;
    5. // 定义并初始化一个含有五个参数的对象
    6. deque<int> deque1{12345};

    常规操作

    增加元素

    1. //插入函数
    2. deque0.push_front(3);//头部插入
    3. deque0.push_back(2);//尾部插入

    遍历元素

    也可以用类似数组的操作,直接取值!

    可以用双向迭代器:

    • r就是反向,单词应该是reback的首字母;

    • c就常量,单词应该是const的首字母。

    成员函数功能
    begin()返回指向容器中第一个元素的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。
    end()返回指向容器最后一个元素之后一个位置的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。此函数通常和 begin() 搭配使用。
    rbegin()返回指向最后一个元素的反向迭代器;如果是 const 类型容器,在该函数返回的是常量反向迭代器。
    rend()返回指向第一个元素之前一个位置的反向迭代器。如果是 const 类型容器,在该函数返回的是常量反向迭代器。此函数通常和 rbegin() 搭配使用。
    cbegin()常量正向迭代器,不能用于修改元素。
    cend()常量正向迭代器,不能用于修改元素。
    crbegin()常量反向迭代器,不能用于修改元素。
    crend()常量反向迭代器,不能用于修改元素。

    迭代器的具体功能示意图

    对象名字iter就是对应的随机访问迭代器,可以支持:

    • iter+=i:使得 iter 往后移动 i 个元素。

    • iter-=i:使得 iter 往前移动 i 个元素。

    • iter+i:返回 iter 后面第 i 个元素的迭代器

    • iter-i:返回 iter 前面第 i 个元素的迭代器

    • iter[i]:返回 iter 后面第 i 个元素的引用。

    1. //查询
    2. if (!deque1.empty()) { //true,则deque中无元素
    3.     //顺序遍历,跟数组一样可以直接取值!
    4.     for (int i = 0; i < deque1.size(); i++)
    5.         cout << deque1[i] << " ";
    6.     cout << endl;
    7.     //正向迭代器遍历
    8.     for (deque<int>::iterator iter = deque1.begin(); iter != deque1.end(); iter++)
    9.         cout << *iter << " ";
    10.     cout << endl;
    11.     //反向迭代器遍历
    12.     for (deque<int>::reverse_iterator iter = deque1.rbegin(); iter != deque1.rend(); iter++)
    13.         cout << *iter << " ";
    14.     cout << endl;
    15. }

    如果临时记不住指针的类型,可以用auto关键字代替!

    删除元素

    1. //删除函数,无返回值
    2.  deque0.pop_front();//去头
    3.  deque0.pop_back();//去尾
    4.  deque0.clear();//清空

    元素个数

    int size = deque0.size();
    

    排序

    1. #include <algorithm>
    2. using namespace std;
    3. //利用算法实现对deque容器进行排序
    4. sort(deque0.begin(),deque0.end());

    对于自定义的类型,则需要重载operator<operator==,然后重新调用该算法就可以了。具体例子在其他文章中,不在此复述。

    感谢

    感谢现在努力的自己。

    感谢现在的好奇,为了能成为更好的自己。

    deque容器迭代器用法详解

  • 相关阅读:
    surging 将推出社区版微服务平台
    mysql 的注释 -- 其后要加上空格
    HLS入门
    大数据培训MapReduce常见错误及解决方案
    宇凡微发布2.4G合封芯片YE08,融合高性能MCU与射频收发功能
    Python反复折磨斐波那契序列
    servlet对象的生命周期
    cmd暂停命令pause
    FAC1206R路由器刷机
    Java进阶API第四章
  • 原文地址:https://blog.csdn.net/qq_41461536/article/details/126571539