(五)STL序列容器(deque)

2022-06-19 17:45:10 字數 1855 閱讀 8266

採用的是連續的線性空間

deque :儲存的空間是由一段一段等長的連續空間構成,各段空間之間並不一定是連續的,可以位於在記憶體的不同

為管理這些連續的空間,deque容器用陣列儲存著各個連續空間的位址,即陣列中儲存的都是指標,

由於 deque 容器底層將序列中的元素分別儲存到了不同段的連續空間中,因此要想實現迭代器的功能,必須先解決如下 2 個問題:

(1)迭代器在遍歷 deque 容器時,必須能夠確認各個連續空間在 map 陣列中的位置;

(2)迭代器在遍歷某個具體的連續空間時,必須能夠判斷自己是否已經處於空間的邊緣位置。如果是,則一旦前進或者後退,就需要跳躍到上乙個或者下乙個連續空間中。

基本方法

#include#include

#include

#include

using

namespace

std;

intmain()

printf("\n

");for (auto i = begin(d); i < end(d); i++)

//訪問方式

printf("\n"

); cout

<< d[1] <

cout

<< d.at(1) <

cout

<< d.front() <

cout

<< d.back() <

/*1.沒有提供data()成員,不能訪問

cout << d.data() << endl;

2.deque儲存元素時,無法保證其會將元素儲存在連續的記憶體空間中,因為不能用指標訪問

auto first = d.begin()+1;

auto end = d.end()-1;

while (first < end)

*/system(

"pause");

return1;

}

insert使用

#include#include#include#include#includeusing namespace std;

void showprint(dequed)

/* 這種顯示不好

for (auto i = d.begin(); i < d.end(); i++)

*/ printf("\n\n");

}int main()

; // 第一種

d.insert(d.begin() + 1, 33); // 1 33 10

showprint(d);

// 第二種

d.insert(d.end(), 3, 6); // 1 33 10 6 6 6

showprint(d);

// 第三種

arrayarr;

d.insert(d.end(), arr.begin(), arr.end());

showprint(d); // 1 33 10 6 6 6 11 21 31

// 第四種

d.insert(d.end(), );

showprint(d);

system("pause");

return 1;

}

stl之序列容器 deque

相比於vector,deque是一種雙向開口的連續線性空間,可以在頭尾兩端分別做元素的插入和刪除操作。這也決定了其更賦值的容器結構。deque內部維護了start和finish 節點,用於雙端的插入和刪除 map,一塊連續空間,其每個元素都是個指標,指向乙個節點。其指向的節點中有四個元素 cur f...

STL序列式容器之deque

deque是一種雙向開口的連續線性空間,所謂雙向是指可以在首尾兩端進行插入和刪除,邏輯結構如圖所示 deque和vector最大的差異在於deque可以在常數時間內對頭端進行插入和刪除操作,而且deque沒有容量的概念,隨時可以增加一段新的空間並鏈結起來。除非必要,應盡量使用vector而非dequ...

STL序列式容器之deque

deque概述 vector是單向開口的連續線性空間,deque則是一種雙向開口的連續線性空間。所謂雙向開口,意思是可以在頭尾兩端分別做元素的插入和刪除操作。vector當然也可以在頭尾兩端分別做元素的插入刪除操作 從技術上說 但是其頭部操作效率極差而無法被接受。deque和vector的最大差異,...