STL C 標準模板庫 deque(佇列)

2021-10-09 10:44:49 字數 3939 閱讀 4353

03、deque成員函式表及示例

04、小結

2.1、 簡介

c++佇列(deque)是一種容器介面卡,它給予程式設計師一種先進先出(fifo)的資料結構。

deque(發音類似「deck」),是雙端佇列不規則的首字母縮寫,雙端佇列是動態大小的序列式容器,其可 以像兩端進行伸縮。

特定的庫可以以不同的方式實現deque,但通常都是一種動態陣列。不論在何種情況下,它都允許通過 隨機訪問迭代器直接訪問單個元素,可以根據需要動態的伸縮。

deque提供了一些與vector相似的功能,但deque在頭部和尾部進行資料插入和刪除操作更加高 效。與vector不同的是,deque不能保證所有的元素儲存在連續的空間中,在deque中通過指標加偏移 量方式訪問元素可能會導致非法的操作。

vector與list提供了相似的介面,因此其具有類似的用途,但是內部的實現原理不同:vector使用使用了 動態陣列,該陣列通常需要動態增長;deque中的元素可能分散在不同的儲存塊中,在deque中儲存了 一些必要的資訊,通常用來在常數範圍內直接訪問deque中的任何乙個元素,所以deque的內部實現比 vector複雜,但是這些額外資訊使得dque在某些情況下增長更加的高效,特別是在序列比較大,重新分 配成本比較高的情況下。

除了在頻繁在頭部或尾部進行插入和刪除操作外,deque比list和forward_list的效能更差。

2.2、 使用

deque的構造

deque的迭代器

雙端佇列底層是一段假象的連續空間,實際是分段連續的,為了維護器「整體連續」的假象,被deque的迭代器實現了,原理圖如下:

deque的容量操作

deque的元素訪問操作

deque中修改操作

這裡的話,我主要講幾個常用的成員函式,因為這個deque容器本來就用的少,函式的話,講一下常用的即可。

函式(function)

描述(description)

push_back()

在deque容器尾部插入乙個元素(尾插)

push_front()

在deque容器頭部插入乙個元素(頭插)

pop_back()

在deque容器尾部刪除乙個元素(尾刪)

pop_front()

在deque容器頭部刪除乙個元素(頭刪)

front()

返回第乙個元素

back()

返回最後乙個元素

size()

返回deque容器中元素的總個數

empty()

返回值為bool型別,容器為null則為true

3.1、 push_back() 和 push_front()

syntax:

//void push_back( const type &val );

//void push_front( const type &val );

#include

#include

using

namespace std;

void

test01()

cout << endl;

}int

main()

3.2、 pop_back() 和 pop_front()

syntax:

//void pop_back();

//void pop_front();

#include

#include

using

namespace std;

void

test01()

cout << endl;

//下面就我們就在上面的基礎上做刪除操作,且刪除一次,看一次。

de.pop_back()

;//尾刪

for(

int i : de)

de.pop_front()

;//頭刪

for(

int i : de)

}int

main()

3.3、 front() 和 back()

syntax:

// type &front(); 返回佇列第乙個元素的引用。

// type &back(); 返回乙個引用,指向佇列的最後乙個元素。

#include

#include

using

namespace std;

void

test01()

cout << endl;

//下面就我們就在上面的基礎上做查值操作

cout <<

"第乙個元素是:"

<< de.

front()

<< endl;

//3 cout <<

"最後乙個元素是:"

<< de.

back()

<< endl;

//4}

intmain()

3.4、 size()

syntax:

#include

#include

using

namespace std;

void

test01()

cout << endl;

//下面就我們就在上面的基礎上操作

int len = de.

size()

; cout <<

"deque的大小是:"

<< len << endl;

//5}

intmain()

3.5、 empty()

syntax:

#include

#include

using

namespace std;

void

test01()

cout << endl;

//下面就我們就在上面的基礎上操作

if(de.

empty()

)else

}int

main()

只是簡單的儲存元素使用vector即可,如果對元素任意位置進行插入或者刪除操作比較多,使用list即可,所以一般很少使用deque;deque的最大應用,就是用其作為標準庫中stack和queue的底層結構。

關於deque的話,大概就只有這幾個會用上,其他的迭代器等等,上面中已經有大致說明,了解即可,將重點放在vector、list、map、set等容器上即可。

STL C 標準模板庫

軟體界的需求 1 建立一種可重複利用的東西 2 建立一套資料結構與演算法的標準 c 的物件導向與泛型程式設計思想,目的是提公升 的復用性。stl,是c 為建立資料結構和演算法的一套標準。stl 標準模板庫 從廣義上分為 容器 container 演算法 algorithm 和迭代器 iterator...

C STL標準模板庫 deque

deque是雙端陣列,可以對頭端和尾端進行插入和刪除操作 deque和vector的區別 deque的內部原理 deque內部有個中控器,維護每段緩衝區中的內容,緩衝區中存放真實資料 中控器維護的是每個緩衝區的位址,使得使用deque時像一片連續的記憶體空間 deque容器的迭代器也是支援隨機訪問的...

STL標準模板庫 queue及deque

是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為...