• deque容器(20221115)


    1、基本概念

    功能:双端数组,可以对头端进行插入删除元素

    deque与vector的区别:

    vector对应头部的插入删除效率低,数据量越大,效率越低

    deque对头部的插入删除速度比vector快

    vector访问元素速度比deque快

    deque内部工作原理:

    其内部有一个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据;

    中控器维护的是每段缓冲区的地址,使得使用deque像一片连续的内存空间;

    deque容器的迭代器也是支持随机访问的。

    2、构造函数

    1. void printDeque(const deque<int>&d)
    2. {
    3.     //遍历
    4.     for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    5.     {
    6.         cout << *it << " ";
    7.     }
    8.     cout << endl;
    9.     for (int i = 0; i < d.size(); i++)
    10.     {
    11.         cout << d.at(i) << " ";
    12.     }
    13.     cout << endl;
    14. }
    15. void test01()
    16. {
    17.     deque<int>d1;//默认构造
    18.     for (int i = 0; i < 10; i++)
    19.     {
    20.         d1.push_back(i);
    21.     }
    22.     printDeque(d1);
    23.     deque<int>d2(d1.begin(), d1.end());//区间构造
    24.     printDeque(d2);
    25.     deque<int>d3(d1);//拷贝构造
    26.     printDeque(d2);
    27.     deque<int>d4(10,100);//n个elem构造
    28.     printDeque(d2);
    29. }

    3、deque容器的赋值操作

    1. void printDeque(const deque<int>&d)
    2. {
    3.     //遍历
    4.     for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    5.     {
    6.         cout << *it << " ";
    7.     }
    8.     cout << endl;
    9. }
    10. void test01()
    11. {
    12.     //赋值操作
    13.     deque<int>d1;//默认构造
    14.     for (int i = 0; i < 10; i++)
    15.     {
    16.         d1.push_back(i);
    17.     }
    18.     printDeque(d1);
    19.     //1、等号赋值
    20.     deque<int>d2;
    21.     d2 = d1;
    22.     printDeque(d2);
    23.     //2、assign赋值
    24.     deque<int>d3;
    25.     d3.assign(d1.begin(), d1.end());
    26.     deque<int>d4;
    27.     d4.assign(10, 999);
    28.     printDeque(d4);
    29. }

    4、deque大小操作

    函数原型:

    deque.empty(); //判断容器是否为空

    deque.size() ; //返回容器中的元素个数

    deque.resize(num); //重新指定大小,以默认值填充新位置

    deque.resize(num,elem); //重新指定大小,以elem填充新位置

    deque无容量属性。

    1. void test02()
    2. {
    3.     //大小操作
    4.     deque<int>d1;//默认构造
    5.     for (int i = 0; i < 10; i++)
    6.     {
    7.         d1.push_back(i);
    8.     }
    9.     printDeque(d1);
    10.     if (d1.empty())
    11.     {
    12.         cout << "d1为空" << endl;
    13.     }
    14.     else
    15.     {
    16.         cout << "d1不为空" << endl;
    17.         cout << "d1大小为" << d1.size()<
    18.         d1.resize(15);
    19.         printDeque(d1);
    20.         d1.resize(10, 999);
    21.         printDeque(d1);
    22.     }
    23. }

    5、deque的插入和删除操作

    函数原型:

    1)两端插入操作

    push_back(elem);//容器尾部插入

    push_front(elem);

    pop_back(); //头删

    pop_front();

    2)指定位置操作

    insert(pos,elem); //在pos位置插入elem,返回新数据的位置

    insert(pos,n,elem); //在pos位置插入n个elem ,无返回值

    insert(pos,beg,end); //在pos位置插入[beg,end]区间的数据,无返回值

    clear(); //清空

    erase(beg,end); //删除【beg,end】区间的数据,返回下一个数据的位置

    erase(pos); //删除pos位置的数据,返回下一个数据的位置

    注意插入和删除提供的位置pos是迭代器,不是索引! 如d1.begain(),d1.end()

    6、deque的数据存取操作

    函数原型:

    at(int indeex); //返回索引位置的数据

    operator[]; //通过【】访问数据

    front(); //返回最前面数据

    back();//返回最后面数据

    与vector类似

    7、deque排序

    注意所有标准算法都需要引入: #include

    算法:sort(iterator beg,iterator end);//对beg和end区间内的数据进行排序

    1. void test03()
    2. {
    3.     //赋值操作
    4.     deque<int>d1;//默认构造
    5.     d1.push_back(10);
    6.     d1.push_back(11);
    7.     d1.push_back(9);
    8.     d1.push_back(8);
    9.     d1.push_back(200);
    10.     d1.push_back(100);
    11.     printDeque(d1);
    12.     sort(d1.begin(), d1.end());
    13.     cout << "排序后:" << endl;
    14.     printDeque(d1);
    15. }

    sort()默认升序。

    对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序,vector也可利用sort算法直接对其进行排序。

  • 相关阅读:
    Fast-DDS库的安装教程
    基于机器学习的搜索推荐系统
    深入理解 Python 描述符
    工程师职称申报个人专业技术业务工作总结怎么写?
    Python的requests库使用总结
    CSP 2022 提高组&普及组总结
    【Spring Boot】分页查询
    【电子通识】USB发展历史
    嵌入式单片机中项目在线仿真工具分享
    记录一次SQL函数和优化的问题
  • 原文地址:https://blog.csdn.net/qq_60143666/article/details/127867819