deque queue和stack深度探索(上)

2022-07-12 02:42:11 字數 1161 閱讀 6179

deque是可雙端擴充套件的雙端佇列,藍色部分就是它的迭代器類,擁有四個指標,第乙個cur用來指向當前元素,first指向當前buffer頭部,last指向當前buffer尾部,node指向map自己當前buffer在map中的位置。

map叫做控制中心,它是由vector來實現的,所以它也擁有擴容功能,buffer的大小一般固定,當迭代器跳轉到某個buff兩端並繼續往兩端移動時,node就會跳轉,即迭代器便指向另乙個buffer,如果deque在自增元素,則當前buff不足時,deque會申請buff,map增加指向新的buff。

因為乙個deque中有兩個迭代器(乙個迭代器16位元組大小)、乙個指標和乙個無符號整形,所以deque大小為40位元組。

但是實際上在本機上並不是這樣

檢測程式

是什麼原因導致的呢?

我去看了一下我自己的原始碼  //linux下檢視原始碼位置點這裡

很多態別,而且還有乙個 _deque_base這個類,然後我再搜尋了一下

所以我的deque大小的80就是這麼來的。說明我的stl庫版本與侯捷老師課程講解的不同,老師講解的版本應該是gun2.9。

deque裡insert方法的實現思想

我們知道,像這種線性連續記憶體的容器,如果要隨機插入元素,則難以避免大量元素的移動。因此deque的insert方法首先會判斷插入的位置是否是頭尾,如果不是,就會檢查插入位置和兩端(這裡的兩端指的是deque抽象形態的兩端,而並非其中某個buff的兩端)元素的距離,選擇近的一端進行移動。

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...

if和switch和for語句

if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...