首页 > 其他分享 >deque

deque

时间:2024-02-20 18:56:14浏览次数:20  
标签:deque end 容器 beg pos elem

deque容器

1.数据结构:逻辑上是连续的存储空间,实际上的由很多块定量的块空间,通过中控制连接起来

2.迭代器:随机迭代器

Deque是由一段一段的定量的连续空间构成。一旦有必要在deque前端或者尾端增加新的空间,便配置一段连续定量的空间,串接在deque的头端或者尾端。Deque最大的工作就是维护这些分段连续的内存空间的整体性的假象,并提供随机存取的接口,避开了重新配置空间,复制,释放的轮回,代价就是复杂的迭代器架构。

既然deque是分段连续内存空间,那么就必须有中央控制,维持整体连续的假象,数据结构的设计及迭代器的前进后退操作颇为繁琐。Deque代码的实现远比vector或list都多得多。

Deque采取一块所谓的map(注意,不是STL的map容器)作为主控,这里所谓的map是一小块连续的内存空间,其中每一个元素(此处成为一个结点)都是一个指针,指向另一段连续性内存空间,称作缓冲区。缓冲区才是deque的存储空间的主体。

3.常用的api:

​ 1.构造

deque<T> deqT;//默认构造形式
deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
deque(n, elem);//构造函数将n个elem拷贝给本身。
deque(const deque &deq);//拷贝构造函数。

​ 2.赋值

assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
deque& operator=(const deque &deq); //重载等号操作符 
swap(deq);// 将deq与本身的元素互换

​ 3.大小

deque.size();//返回容器中元素的个数
deque.empty();//判断容器是否为空
deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。

​ 4.双端插入和删除操作

push_back(elem);//在容器尾部添加一个数据
push_front(elem);//在容器头部插入一个数据
pop_back();//删除容器最后一个数据
pop_front();//删除容器第一个数据

​ 5.插入和删除操作

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位置的数据,返回下一个数据的位置。

​ 6.数据存取

at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。
operator[];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
front();//返回第一个数据。
back();//返回最后一个数据

标签:deque,end,容器,beg,pos,elem
From: https://www.cnblogs.com/wbcde116/p/18023820

相关文章

  • 双端队列(deque)--python
    Python中的双端队列(deque)是一种特殊的数据结构,它允许在队列的两端进行插入和删除操作12。双端队列可以看成栈和队列的结合3。在Python中,我们可以使用collections模块中的deque类来创建双端队列12。下面是一些常用的操作方法1:Python`fromcollectionsimportdeque`#创建一个......
  • deque的rotate方法
    deque对象支持旋转操作,可以将元素向左或向右循环移动。例如:fromcollectionsimportdequedq=deque([1,2,3,4])dq.rotate(1)执行后dq变为:[4,1,2,3]元素向右移动了一位,最后一个元素到了最前面。在这个问题中,我们有一个n*n的矩阵,利用deque来表示,旋转操作可......
  • LinkedList(Deque)中添加/删除方法
    转:https://www.jianshu.com/p/ae28d514003c 1简介最近在使用LinkedList/Deque的时候,发现其中有很多类似的方法,我就想简简单单做个添加/删除的操作,发现竟然有那么多类似的方法,比如“添加”操作可以用的方法有:add/offer/push/offerFirst/offerLast,“删除”操作可以用......
  • STL-deque双端队列
    STL-deque双端队列目录STL-deque双端队列创建初始化插入元素删除元素遍历容器函数总览deque和vector参考资料deque是double-endedqueue的缩写,又称双端队列容器,可以对其两段的数据进行操作,因为它没有capacity属性,因此不会像vector那样”旧空间不足而重新配置一块更大空间,然后......
  • 【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 dequ
    文章目录一、stack堆栈容器简介1、stack堆栈容器引入2、stack堆栈容器特点3、stack堆栈容器与deque双端数组容器对比二、代码示例-stack堆栈容器简单示例1、代码示例2、执行结果一、stack堆栈容器简介1、stack堆栈容器引入C++语言中的STL标准模板库中的stac......
  • deque例题2
    //#include<iostream>//#include<deque>//引入deque容器的头文件//usingnamespacestd;//intmain(){// intn;// cin>>n;// intb[n];// deque<int>a(b,b+sizeof(b)/sizeof(int));// for(inti=0;i<n;i++){// cin>>b[i];// }// in......
  • deque应用
    删除指定数字#include<iostream>#include<deque>usingnamespacestd;intmain(){intn,x;cin>>n;intm[n];for(inti=0;i<n;i++){cin>>m[i];}deque<int>a(m,m+sizeof(m)/sizeof(int));cin>......
  • deque容器例题
    #include<iostream>#include<deque>//引入deque容器的头文件usingnamespacestd;intmain(){ deque<int>a; intb[]={1,2,3,4}; deque<int>c(b,b+sizeof(b)/sizeof(int)); a.insert(a.begin(),c.begin(),c.end()); //队头添加元素 a.push_front(0);......
  • deque特有函数事例
    #include<bits/stdc++.h>usingnamespacestd;intmain(){intx[]={2,3,4,5,6,7};deque<int>a(x,x+sizeof(x)/sizeof(int));cout<<"初始值:";for(inti=0;i<a.size();i++){cout<<a[i]<<"......
  • C++STL常用容器deque以及常用接口
    2.1deque容器2.1.1deque容器基本概念功能:双端队列容器,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:......