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 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素稱為...