1. 程式人生 > >雙向佇列的使用

雙向佇列的使用

轉自:http://blog.csdn.net/vanquishedzxl/article/details/8531458
Deque是一種優化了的、對序列兩端元素進行新增和刪除操作的基本序列容器。它允許較為快速地隨機訪問,但它不像vector 把所有的物件儲存在一塊連續的記憶體
塊,而是採用多個連續的儲存塊,並且在一個對映結構中儲存對這些塊及其順序的跟蹤。向deque 兩端新增或刪除元素的開銷很小。它不需要重新分配空間,所以向末端增加元素比vector 更有效。
實際上,deque 是對vector 和list 優缺點的結合,它是處於兩者之間的一種容器。

    deque 的特點: 
               (1) 隨機訪問方便,即支援[ ]  操作符和vector.at()  ,但效能沒有vector 好; 
               (2)  可以在內部進行插入和刪除操作,但效能不及list  ; 
               (3)  可以在兩端進行push  、pop  ; 
               (4)  相對於verctor 佔用更多的記憶體。 
    雙向佇列和向量很相似,但是它允許在容器頭部快速插入和刪除(就像在尾部一樣)。

   1.Constructors  建立一個新雙向佇列 
              語法: 
                     deque();//建立一個空雙向佇列 
                     deque( size_type size );// 建立一個大小為size的雙向佇列 
                     deque( size_type num, const TYPE &val ); //放置num個val的拷貝到佇列中 
                     deque( const deque &from );// 從from建立一個內容一樣的雙向佇列 
                     deque( input_iterator start, input_iterator end ); 
                    // start 和  end - 建立一個佇列,儲存從start到end的元素。  

   2.Operators 比較和賦值雙向佇列 
       //可以使用[]操作符訪問雙向佇列中單個的元素 
   3.assign() 設定雙向佇列的值 
              語法: 
                     void assign( input_iterator start, input_iterator end);  
                      //start和end指示的範圍為雙向佇列賦值 
                    void assign( Size num, const TYPE &val );//設定成num個val。 
  4.at() 返回指定的元素 
             語法: 
                  reference at( size_type pos ); 返回一個引用,指向雙向佇列中位置pos上的元素 
  5.back() 返回最後一個元素 
             語法:   
                    reference back();//返回一個引用,指向雙向佇列中最後一個元素 
  6.begin() 返回指向第一個元素的迭代器 
             語法:   
                   iterator begin();//返回一個迭代器,指向雙向佇列的第一個元素 
  7.clear()  刪除所有元素

  8.empty() 返回真如果雙向佇列為空 
  9.end() 返回指向尾部的迭代器 
 10.erase()  刪除一個元素 
             語法: 
                    iterator erase( iterator pos ); //刪除pos位置上的元素 
                    iterator erase( iterator start, iterator end ); //刪除start和end之間的所有元素
                   //返回指向被刪除元素的後一個元素 
 11.front()  返回第一個元素的引用

 12.get_allocator()  返回雙向佇列的配置器 
 13.insert()  插入一個元素到雙向佇列中 
             語法: 
                    iterator insert( iterator pos, size_type num, const TYPE &val ); //pos前插入num個val值
                    void insert( iterator pos, input_iterator start, input_iterator end );  
                   //插入從start到end範圍內的元素到pos前面 
 14.max_size()  返回雙向佇列能容納的最大元素個數 
 15.pop_back() 刪除尾部的元素 
 16.pop_front() 刪除頭部的元素 
 17.push_back() 在尾部加入一個元素 
 18.push_front()  在頭部加入一個元素 
 19.rbegin()  返回指向尾部的逆向迭代器 
  20.rend() 返回指向頭部的逆向迭代器 
  21.resize()  改變雙向佇列的大小 
 22.size()  返回雙向佇列中元素的個數 
 23.swap() 和另一個雙向佇列交換元素 
    語法:

    void swap( deque &target );// 交換target和現雙向佇列中元素

相關推薦

SpringBoot整合ActiveMQ訊息佇列雙向佇列、點對點與釋出訂閱

ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。 &nbs

[LeetCode] Design Circular Deque 設計環形雙向佇列

  Design your implementation of the circular double-ended queue (deque). Your implementation should support following operations: M

python deque(雙向佇列

python3 deque(雙向佇列) 建立雙向佇列 import collections d = collections.deque() append(往右邊新增一個元素)   import collections d = collections.deque() d.

php雙向佇列的實現

佇列是一種線性表,按照先進先出的原則進行   單向佇列:只能從頭進,從尾出   雙向佇列:頭尾都可以進出   class DuiLie {   private $array = array();//宣告

雙向佇列的實現

c++中使用佇列的話有queue(單項佇列)、deque(雙向佇列),但在lua中並沒有提供給我們可直接使用的這類資料結構,不過lua中有一個近乎萬能的資料型別table,他可以實現其他語言中各種型別,今天在此先分享下雙向列表的lua實現,原理就是儲存一張表的首尾端索引,每次增刪的時候修改下,並

ACM/ICPC 2018亞洲區預選賽北京賽站網路賽 80 Days(雙向佇列+尺取法)

#1831 : 80 Days 時間限制:1000ms 單點時限:1000ms 記憶體限制:256MB 描述 80 Days is an interesting game based on Jules Verne's science fiction "Around

利用陣列實現雙向佇列(JAVA原始碼)

本文的主要內容就是利用陣列[]實現雙向佇列,當然,Java中有比較豐富的容器可以直接使用,實現類似的功能容器有助於我們更深入的學習好了解相關知識。 現在就開始一步一步講解如何實現。 1、雙向佇列的功能 首先,我們既然要實現該功能,就必然要把需求梳理清楚,我們要實

JAVA雙向佇列實現(連結串列)

佇列是很常見的一種資料儲存結構,今天,介紹下如何用連結串列實現雙向佇列。 首先定義節點介面如下: public interface Node<E> { //設定資料元素 public void setData(E o); //

阻塞佇列BlokingQueue與雙向佇列Deque

Queue: 基本上,一個佇列就是一個先入先出(FIFO)的資料結構 Queue介面與List、Set同一級別,都是繼承了Collection介面。LinkedList實現了Deque接 口。 Queue的實現 1、沒有實現的阻塞介面的LinkedList: 實現了

執行緒佇列排序(雙向佇列

       利用 .append 和 .pop 方法,我們可以把列表當作棧或者佇列來用(比如,把 .append 和 .pop(0) 合起來用,就能模擬棧的“先進先出”的特點)。但是刪除列表的第一個元素(抑或是在第一個元素之前新增一個元素)之類的操作是很耗時的,因為這些操作

[LeetCode] 641.Design Circular Deque 設計環形雙向佇列 [LeetCode] 622.Design Circular Queue 設計環形佇列 All LeetCode Questions List 題目彙總

Design your implementation of the circular double-ended queue (deque). Your implementation should support following operations: MyCircularDeque(k): Const

STL Deque(雙向佇列) C++

標頭檔案:#include<deque>  (動態一維陣列)定義:deque<變數型別> 變數名; 例:deque<變數型別> dq;特點:支援隨機訪問(陣列訪問下表從0開始;at方法訪問,會丟擲異常),效能不如vector;       

Java雙向佇列Deque棧與佇列

Java中實際上提供了java.util.Stack來實現棧結構,但官方目前已不推薦使用,而是使用java.util.Deque雙端佇列來實現佇列與棧的各種需求.如下圖所示java.util.Deque的實現子類有java.util.LinkedList和java.util.ArrayDeque

PHP簡單雙向佇列實現

這是一個簡單的PHP雙向佇列的實現: <?php class Deque{ public $queue = array(); /** * 尾部入對 * @param [type] $value [description] */ public

佇列雙向佇列

# 棧 # 特點: 先進後出 # class StackFullException(Exception): # pass # # class StackEmptyException(Exception): # pass # # class Stack: # # def __ini

STL-deque 雙向佇列[轉載]

原文地址 deque雙向佇列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在介面上和vector非常相似,下面列出deque的常用成員函式: deque的實現比較複雜,內部會維護一個map(注意!不是STL中的map容器)即一小塊連續的空間,該空間中每個元素

STL之deque(雙向佇列

雙向佇列的操作如下: deque<ll>q;//定義一個雙向佇列q,型別為long long q.push_front(a);//將a從隊首插入佇列 q.pus

STL系列之一 deque雙向佇列

deque雙向佇列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在介面上和vector非常相似,下面列出deque的常用成員函式: deque的實現比較複雜,內部會維護一個map(注意!不是STL中的map容器)即一小塊連續的空間,該空間中每個元素都是指標,指向另一段

C++ Double Ended Queues(雙向佇列)

C++ Double Ended Queues(雙向佇列) 雙向佇列和向量很相似,但是它允許在容器頭部快速插入和刪除(就像在尾部一樣)。 Constructors 建立一個新雙向佇列 Operators 比較和賦值雙向

雙向佇列的使用

轉自:http://blog.csdn.net/vanquishedzxl/article/details/8531458 Deque是一種優化了的、對序列兩端元素進行新增和刪除操作的基本序列容器。它允許較為快速地隨機訪問,但它不像vector 把所有的物件儲