deque雙端隊列,分段連續(xù)空間數(shù)據(jù)結(jié)構(gòu),由中控的map(與其說map,不如說是數(shù)組)控制,map中每個槽指向一個固定大小的緩沖(連續(xù)的線性空間)。 
deque的迭代器,關(guān)鍵的四個指針:

cur     //所指緩沖區(qū)中的現(xiàn)元素first   //所指緩沖區(qū)中的頭last    //所指緩沖區(qū)中的尾node    //指向中控的槽

平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),游戲開發(fā),動畫培訓(xùn)

start指向中控第一個槽位的buffer中的第一個元素,finish指向中控最后一個槽位指向的buffer中的最后一個元素。 
每次新建deque時,創(chuàng)建中控map和nodes,根據(jù)初始的元素個數(shù)計算開始槽位nstart和nfinish。

map_pointer nstart = map + (map_size - num_nodes) / 2;
map_pointer nfinish = nstart + num_nodes - 1;

這樣做的原因是雙端push或pop時的平均性能最佳。

如圖,如果需要push_back,剛好finish指向的buffer將滿,會向map中finish后一個槽位新建一個buffer node;對應(yīng)的push_front會向map中start前一個槽位新建一個buffer node;如果map不夠空間,也還是要reallocate_map,重新分配map空間遷移已有數(shù)據(jù),釋放老數(shù)據(jù)。

std::stack,std::queue

  • stack是FILO的數(shù)據(jù)結(jié)構(gòu),只有一個出口,若以上述的deque實現(xiàn),封住deque的頭端開口,輕易就能實現(xiàn)stack,stack往往不被歸為container,而被歸為container adapter,源碼十分簡短,底層容器就是deque(當(dāng)然也可以使用list:如stack<int, list >)

class Sequence = deque<T>
  • queue是FIFO的數(shù)據(jù)結(jié)構(gòu),封住back的出口和front的入口即可輕易實現(xiàn),代碼同stack,也被認(rèn)為是container adapter。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式