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

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;
}

http://www.kler.cn/a/593603.html

相关文章:

  • sql批量修改字段某一指定部分+修改重复编号
  • java TCP UDP 客户端访问例子和对比差异
  • 九、JavaScript作用域、预解析
  • 2025年高校辅导员考试题库及答案
  • numpy学习笔记9:numpy的广播机制详细解释
  • 【Transformer】架构:解锁自然语言处理的无限可能
  • 关于金融开发领域的一些专业知识总结
  • 第十三章,L2TP VPN
  • XSS漏洞靶场练习
  • 成都国际数字影像产业园,文创产业运营新典范深度解析​
  • win10 如何用我的笔记本 接网线 远程控制 台式机
  • Python个人学习笔记(17):模块(sys、picklejson)
  • 4.6--入门知识扫盲,路径追踪与路由误导:Tracert攻击 vs ICMP重定向攻击(包你看一遍全记住)
  • iPaaS集成平台中的API可视化编排能给企业带来什么作用
  • Bilve 搭建手册
  • 解析Collections工具类主要功能
  • Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.
  • PyTorch分布式训练中各节点如何通信
  • 第1次课枚举算法
  • Ubuntu 软件仓库管理概述与基本原理