STL原始碼剖析 序列式容器之deque

2021-07-30 20:33:27 字數 1973 閱讀 3081

1.deque概述

deque是一種雙開口的連續線性空間,可以在頭尾兩端分別做元素的插入和刪除操作.

deque沒有容量的概念,它是動態地以分段連續空間組合而成,隨時可以增加一段新的空間並鏈結起來.

2.deque的中控器

deque由一段一段的定量連續空間構成.一旦有必要在deque前端或尾端增加新空間,便配置一段定量連續空間,串接在整個deque的頭端或尾端.

deque的最大任務是在這些分段的定量連續空間上,維護其整體連續的假象,並提供隨機訪問的介面.

deque採用一塊所謂的map作為主控.這裡所謂的map是一小塊連續空間,其中每個元素(此處稱為乙個節點,node)都是指標,指向另一段(較大的)連續線性空間,稱為緩衝區.緩衝區才是deque的儲存空間主體.

3.deque的迭代器

deque是分段連續空間,維護"整體連續"假象的任務,落在迭代器的operator++和operator–兩個運運算元上.

template

struct __deque_iterator

//未繼承std::iterator,所以必須自行撰寫五個必要的迭代器相應型別

typedef random_access_iterator_tag iterator_category ;

typedef t value_type ;

typedef ptr pointer ;

typedef ref reference ;

typedef size_t size_type ;

typedef ptrdiff_t difference_type ;

typedef t** map_pointer ;

typedef __deque_iterator self ;

//保持與容器的聯結

t *cut ; //此迭代器所指之緩衝區中的現行(current)元素

t *first ; //此迭代器所指之緩衝區的頭

t *last ; //此迭代器所指之緩衝區的尾(含備用空間)

map_pointer node ; //指向管控中心

4.deque的資料結構

deque除了維護乙個指向map的指標外,也維護start,finish兩個迭代器,分別指向第一緩衝區的第乙個元素和最後緩衝區的最後乙個元素(的下乙個位置).

template

class

deque ;

5.deque的構造與記憶體管理

裡面的元素都是9,上圖並沒有顯示

STL原始碼剖析之序列式容器

最近由於找工作需要,準備深入學習一下stl原始碼,我看的是侯捷所著的 stl原始碼剖析 之所以看這本書主要是由於我過去曾經接觸過一些台灣人,我一直覺得台灣人非常不錯 這裡不涉及任何政治,僅限個人感受 在技術上他們比較嚴謹,在為人處世上也非常謙虛,所以一些台灣的技術資料我覺得是值得一看的。想要學習st...

《STL原始碼剖析》 序列式容器

stl原始碼剖析 前言 所謂的序列式容器,其中的元素都可序,但未必有序,c 本身提供了乙個序列式容器array,stl 提供了vector,list,deque,srack,queue,priority queue等 一.使用reverse 函式提前設定容量大小 1.1 提前設定的原因 對於vect...

stl原始碼剖析序列式容器之vector

首先介紹下容器的概念,容器是將一些運用最廣的資料結構實現出來,並且根據資料在容器中的排列特性,這些資料結構分為序列式容器以及關聯式容器兩種。其中序列式容器包括array c 自建 vector heap priority queue 由heap演變 list slist deque stack和qu...