deque双向队列

对于双向队列,与队列queue以及vector容器的区别就在于,名字不同,也就是它是双向的,可以从头开始操作,也可以从末尾开始操作。

双向队列的常用方法跟队列queue差不多:

头文件: #include<deque>

函数:

构造/析构

  deque<int>q  构造一个空的双向队列

  deque<int>q(q1)  构造q,并复制q1

  deque<int>q(n)  创建deque,含有n个数据,数据均由缺省构造函数产生

  deque<int>q(beg,end)  创建一个以[beg,end)区间的deque

  q.~deque<int>()  销毁所有的数据,释放内存

赋值

  q.assign(beg,end)  将[beg,end)区间中的数据赋值给q

  q.assign(n,int)  将n个int 的拷贝值给q

数据访问

  q.at(idx)  返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range

  q.fron()  返回第一个数据

  q.back()  返回最后一个数据

  q.begin() 返回指向第一个数据的迭代器

  q.end()  返回指向最后一个数据的下一个位置的迭代器

  q.rbegin() 返回逆向队列的第一个数据

  q.rend() 返回指向逆向队列的最后一个数据的下一个位置的迭代器

加入数据

  q.push_back()  在尾部加入一个数据

  q.push_front()  在头部插入一个数据

  q.insert(pos,int) 在pos 位置插入一个 int 数据的拷贝 ,返回新数据位置

  q.insert(pos,n,int) 在pos 位置插入n 个 int 数据 ,无返回值

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

删除数据

  q.pop_back() 删除最后一个数据

  q.pop_front()  删除头部数据

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

  q.erase(beg,end) 删除[begin,end) 区间的数据,返回下一个数据的位置

其他操作

  q.empty()  判断容器是否为空

  q.max_size()   返回容器中最大数据的数量

  q.resize(num)  重新制定队列的长度

  q.size()  返回容器中实际数据的个数

  q.swap(q1)  将q和q1的元素互换

  swap(q,q1)  同上

    

  

时间: 2024-10-13 23:29:07

deque双向队列的相关文章

STL之deque双向队列

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. Constructors and Destructor of Deques Operation Effect deque<Elem> c Creates an empty deque without any elements deque<Elem> c1(c2) Creates a co

C++ Deque(双向队列)

  C++ Deque(双向队列)是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪.向deque 两端添加或删除元素的开销很小.它不需要重新分配空间,所以向末端增加元素比vector 更有效. 实际上,deque 是对vector 和list 优缺点的结合,它是处于两者之间的一种容器. Deque 的特点: (1) 随机访问方

STL系列之一 deque双向队列(转载)

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据.因此deque在随机访问和遍历数据会比vector慢.具体的deque实现可以参考<STL源码剖析>,当然此书中使用的SGI ST

STL --&gt; deque双向队列

deque简介 deque是双向开口的连续性存储空间.虽说是连续性存储空间,但这种连续性只是表面上的,实际上它的内存是动态分配的,它在堆上分配了一块一块的动态储存区,每一块动态存储去本身是连续的,deque自身的机制把这一块一块的存储区虚拟地连在一起. 它首次插入一个元素,默认会动态分配512字节空间,当这512字节空间用完后,它会再动态分配自己另外的512字节空间,然后虚拟地连在一起.deque 的这种设计使得它具有比vector复杂得多的架构.算法和迭代器设计.它的性能损失比之vector,

Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 import collections # 初始化一个计数器 c = collections.Counter('sldfjoaoaufdlfuaof') print(c) # Counter({'f': 4, 'o': 3, 'a': 3, 'd': 2, 'u': 2, 'l': 2, 'j': 1,

python的collection系列-双向队列和单向队列

单向队列:数据先进先出 双向队列:可进可出 双向队列部分源码: 1 class deque(object): 2 """ 3 deque([iterable[, maxlen]]) --> deque object 4 5 Build an ordered collection with optimized access from its endpoints. 6 """ 7 def append(self, *args, **kwargs

Python学习笔记-Day03 -第二部分(双向队列-deque和单向队列Queue)

双向队列 线程安全的双向队列 例 >>> a= collections.deque() >>> a.append(1) >>> a.appendleft(2) >>> a.append(3) >>> a.appendleft(4) >>> a.append(5) >>> a.appendleft(6) >>> a deque([6, 4, 2, 1, 3, 5])

双端队列篇deque SDUT OJ 双向队列

双向队列 Time Limit: 1000MS Memory limit: 65536K 题目描述 想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首:两头都可以做出队,入队的操作. 现在给你一系列的操作,请输出最后队列的状态: 命令格式: LIN X  X表示一个整数,命令代表左边进队操作: RIN X  表示右边进队操作: ROUT LOUT   表示出队操作: 输入 第一行包含一个整数M(M<=10000),表示有M个操作: 以下M行每行包含一条命令: 命令可能不合法

python3 deque(双向队列)

创建双向队列 import collections d = collections.deque() append(往右边添加一个元素) import collections d = collections.deque() d.append(1) d.append(2) print(d) #输出:deque([1, 2]) appendleft(往左边添加一个元素) import collections d = collections.deque() d.append(1) d.appendlef