天天看點

【C++】 C++标準模闆庫(十) 雙向隊列

1. C++ Double Ended Queues(雙向隊列)

雙向隊列和​​向量​​很相似,但是它允許在容器頭部快速插入和删除(就像在尾部一樣)。

​​Constructors​​ 建立一個新雙向隊列
​​Operators​​ 比較和指派雙向隊列
​​assign()​​ 設定雙向隊列的值
​​at()​​ 傳回指定的元素
​​back()​​ 傳回最後一個元素
​​begin()​​ 傳回指向第一個元素的疊代器
​​clear()​​ 删除所有元素
​​empty()​​ 傳回真如果雙向隊列為空
​​end()​​ 傳回指向尾部的疊代器
​​erase()​​ 删除一個元素
​​front()​​ 傳回第一個元素
​​get_allocator()​​ 傳回雙向隊列的配置器
​​insert()​​ 插入一個元素到雙向隊列中
​​max_size()​​ 傳回雙向隊列能容納的最大元素個數
​​pop_back()​​ 删除尾部的元素
​​pop_front()​​ 删除頭部的元素
​​push_back()​​ 在尾部加入一個元素
​​push_front()​​ 在頭部加入一個元素
​​rbegin()​​ 傳回指向尾部的逆向疊代器
​​rend()​​ 傳回指向頭部的逆向疊代器
​​resize()​​ 改變雙向隊列的大小
​​size()​​ 傳回雙向隊列中元素的個數
​​swap()​​ 和另一個雙向隊列交換元素

2. C++ Double-Ended Queues(雙向隊列)

Constructors

​文法:​

deque();
  deque( size_type size );
  deque( size_type num, const TYPE &val );
  deque( const deque &from );
  deque( input_iterator start, input_iterator end );      

C++ Deques能用以下方式建立:

  • 無參,建立一個空雙向隊列
  • ​size​ - 建立一個大小為size的雙向隊列
  • ​num​ and ​val​ - 放置num個val的拷貝到隊列中,
  • ​from​ - 從from建立一個内容一樣的雙向隊列
  • ​start​ 和 ​end​ - 建立一個隊列,儲存從start到end的元素。

例如,下列代碼建立并顯示一個雙向隊列:

// 建立一個雙向隊列,裡面有10個1
  deque

   dq( 10, 1 );
  // 建立一個疊代器
  deque

   ::iterator iter;

  // 顯示這個雙向隊列
  for( iter = dq.begin(); iter != dq.end(); iter++ ){ 
    cout << *iter << endl;
  }      

Operators

​文法:​

[]      

你可以使用[]操作符通路雙向隊列中單個的元素。

assign

​文法:​

void assign( input_iterator start, input_iterator end);
  void assign( Size num, const TYPE &val );      

assign()函數用start和end訓示的範圍為雙向隊列指派,或者設定成num個val。

at

​文法:​

reference at( size_type pos );      

at()函數傳回一個引用,指向雙向隊列中位置pos上的元素。

back

​文法:​

reference back();      

back()傳回一個引用,指向雙向隊列中最後一個元素。

begin

​文法:​

iterator begin();      

begin()函數傳回一個​​疊代器​​,指向雙向隊列的第一個元素。

clear

​文法:​

void clear();      

clear()函數删除雙向隊列中所有元素。

empty

​文法:​

bool empty();      

empty()傳回真如果雙向隊列為空,否則傳回假。

end

​文法:​

iterator end();      

end()函數傳回一個​​疊代器​​,指向雙向隊列的尾部。

erase

​文法:​

iterator erase( iterator pos );
  iterator erase( iterator start, iterator end );      

erase()函數删除pos位置上的元素,或者删除start和end之間的所有元素。傳回值是一個​​iterator​​,指向被删除元素的後一個元素。

front

​文法:​

reference front();      

front()函數傳回一個引用,指向雙向隊列的頭部。

get_allocator

​文法:​

allocator_type get_allocator();      

get_allocator()函數傳回雙向隊列的配置器。

insert

​文法:​

iterator insert( iterator pos, size_type num, const TYPE &val );
  void insert( iterator pos, input_iterator start, input_iterator end );      

insert()在pos前插入num個val值,或者插入從start到end範圍内的元素到pos前面。

max_size

​文法:​

size_type max_size();      

max_size()傳回雙向隊列能容納的最大元素個數。

pop_back

​文法:​

void pop_back();      

pop_back()删除雙向隊列尾部的元素。

pop_front

​文法:​

void pop_front();      

pop_front()删除雙向隊列頭部的元素。

push_back

​文法:​

void push_back( const TYPE &val );      

push_back()函數在雙向隊列的尾部加入一個值為val的元素。

push_front

​文法:​

void push_front( const TYPE &val );      

push_front()函數在雙向隊列的頭部加入一個值為val的元素。

rbegin

​文法:​

reverse_iterator rbegin();      

rbegin()傳回一個指向雙向隊列尾部的逆向​​疊代器​​。

rend

​文法:​

reverse_iterator rend();      

rend()傳回一個指向雙向隊列頭部的逆向​​疊代器​​。

resize

​文法:​

void resize( size_type num, TYPE val );      

resize()改變雙向隊列的大小為num,另加入的元素都被填充為val。

size

​文法:​

size_type size();      

size()函數傳回雙向隊列中的元素個數。

swap

void swap( deque &target );