当前位置: 首页 > news >正文

deque

deque概念

双端数组,可以对头端进行插入删除操作

deque和vector差别(就像数据结构中的栈和队列)

vector对于头部的插入删除效率低,而deque则相对高效

vector和deque都支持随机访问,但是vector的随机访问效率低,而deque则相对高效

vector和deque都支持迭代器,但是vector的迭代器效率低,而deque则相对高效

deque相对而言,对头部的插入删除操作会比vector快

 

deque内部工作原理

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

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

deque构造函数

deque<T>deqT;// 默认构造函数,创建一个空的deque

deque(beg,end);// 构造函数,创建一个区间[beg,end)区间的元素拷贝给本身

deque(n,elm);// 构造函数,创建一个长度为n的deque,每个元素都为elm

deque(const deque &deq);// 构造函数,创建一个deque的拷贝

#include <iostream>
#include <deque>
using namespace std;

void printDeque(const deque<int> &d){
    for(deque<int>::const_iterator it=d.begin();it!=d.end();it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

void test(){
    deque<int> d;
    for(int i=0;i<10;i++){
        d.push_back(i);
    }
    printDeque(d);

    deque<int> d2(d.begin(),d.end());
    printDeque(d2);

    deque<int> d3(10,100);
    printDeque(d3);

    deque<int> d4=d3;
    printDeque(d4);
}

int main()
{
    test();
    system("pause");
    return 0;
}

基本语法和vector类似

deque赋值操作

deque& operator=(const deque &deq);//重载等号操作符

assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。

assign(n, elem);//将n个elem拷贝赋值给本身。

、#include <iostream>
#include <deque>

using namespace std;

void printDeque(const deque<int> &d)
{
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

void test(){
    deque<int> d1;
    for(int i=0;i<10;i++){
        d1.push_back(i);
    }
    printDeque(d1);

    deque<int> d2;
    d2=d1;
    printDeque(d2);

    deque<int> d3;
    d3.assign(d1.begin(),d1.end());
    printDeque(d3);

    deque<int> d4;
    d4.assign(10, 100);
    printDeque(d4);
}
int main()
{
    test();
    system("pause");
    return 0;
}

deque大小操作 

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

deque.size();// 返回deque元素个数

deque.resize(num);// 调整deque元素个数,若小于num,则用默认值补充,若大于num,则删除末尾元素

deque.resize(num,value);// 调整deque元素个数,若小于num,则用value补充,若大于num,则删除末尾元素

deque.max_size();// 返回deque可容纳的最大元素个数

deque.clear();// 清空deque

#include <iostream>
#include <deque>

using namespace std;

void printDeque(const deque<int> &d)
{
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

void test(){
    deque<int> d1;
    for(int i=0;i<10;i++){
        d1.push_back(i);
    }
    printDeque(d1);

    if(d1.empty()){
        cout<<"d1为空"<<endl;
    }else{
        cout << "d1的大小为:" << d1.size() << endl;
    }

    d1.resize(15,10);
    printDeque(d1);

    d1.resize(20);
    printDeque(d1);
}

int main()
{
    test();
    system("pause");
    return 0;
}

deque插入和删除

push_back(elm);// 在队尾插入元素elm

push_frony(elm);// 在队首插入元素elm

pop_back();// 删除队尾元素

pop_front();// 删除队首元素

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

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

insert(pos,beg,end);// 在pos位置插入[beg,end)区间内的所有元素,无返回值

clear();// 清空deque

erase(beg,end);// 删除[beg,end)区间内的所有元素,返回删除区间最后一个元素的下一个位置

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

#include <iostream>
#include <deque>

using namespace std;

void printDeque(const deque<int> &d)
{
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

void test(){
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    printDeque(d1);// 10 20

    d1.push_front(30);
    d1.push_front(40);
    printDeque(d1);// 40 30 10 20

    d1.pop_back();
    printDeque(d1);// 40 30 10
    d1.pop_front();
    printDeque(d1);// 30 10
}
int main()
{
    test();
    system("pause");
    return 0;
}

deque数据存取

at(int idx);//访问索引idx的元素,如果越界,则抛出异常

operator[](int idx);//访问索引idx的元素,如果越界,则返回0

front();//访问第一个元素

back();//访问最后一个元素

#include <iostream>
#include <deque>

using namespace std;

void printDeque(deque<int>& d){
    for(deque<int>::const_iterator it=d.begin();it!=d.end();it++){
        cout<<*it<<endl;
    }
    cout<<endl;
}

void test(){
    deque<int> d;
    d.push_back(10);
    d.push_back(20);
    d.push_front(100);
    d.push_front(200);

    for(int i=0;i<d.size();i++){
        cout<<d[i]<<" ";
    }
    cout<<endl;

    for(int i=0;i<d.size();i++){
        cout<<d.at(i)<<" ";
    }
    cout<<endl;

    cout<<"front"<<d.front()<<endl;
    cout<<"back"<<d.back()<<endl;
}
int main()
{
    test();
    system("pause");
    return 0;
}

deque排序

sort(iterator beg, iterator end) //对beg和end区间内元素进行排序

#include <iostream>
#include <deque>
#include<algorithm>

using namespace std;

void printDeque(deque<int>& d){
    for(deque<int>::iterator it=d.begin();it!=d.end();it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

void test(){
    deque<int> d;
    d.push_back(10);
    d.push_back(20);
    d.push_front(100);
    d.push_front(200);

    printDeque(d);//200 100 10 20
    sort(d.begin(),d.end());
    printDeque(d);//10 20 100 200
}

int main()
{
    test();
    system("pause");
    return 0;
}

相关文章:

  • Linux基础开发工具--gdb的使用
  • 蓝桥杯青少组stema2025年3月9日scratch初级组真题——转动的图形
  • 除自身以外数组的乘积——面试经典150题(力扣)
  • 每天一道算法题-两数相加
  • C++编程语言特性
  • Android Jetpack Compose介绍
  • 238.除自身以外数组的乘积
  • 【sgHelp】自定义组件:网站、平台右下角的帮助助手、指导助理
  • app测试必须进行吗?需要进行哪些测试?
  • 混元视频与万相2.1全面对比分析
  • 嵌入式笔记 | 正点原子STM32F103ZET6 4 | 中断补充
  • 搭建个人博客教程(Hexo)
  • Django+celery+flower
  • 【文件分类助手V1.0b】支持自定义后缀分类整理及目录文档自动生成,方便大家美化管理自己的PC文件库支持Win10/11
  • 【从零开始学习计算机科学与技术】计算机网络(三)数据链路层
  • 蓝桥杯备考---》分类讨论之Fixed Points
  • 在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用
  • Vue3 集成wangEditor 5
  • 鸿蒙开发真机调试:无线调试和USB调试
  • MQ,RabbitMQ,MQ的好处,RabbitMQ的原理和核心组件,工作模式
  • 甘肃省白银市一煤矿发生透水事故,3人失联
  • 美国恶劣天气已造成至少28人死亡
  • 光明日报社副总编辑薄洁萍调任求是杂志社副总编辑
  • 国寿资产获批参与第三批保险资金长期投资改革试点
  • 戛纳打破“疑罪从无”惯例,一法国男演员被拒之门外
  • 媒体:“重病老人银行取款身亡”涉事家属称已和解,银行将支付十万