採用的是連續的線性空間
deque :儲存的空間是由一段一段等長的連續空間構成,各段空間之間並不一定是連續的,可以位於在記憶體的不同
為管理這些連續的空間,deque容器用陣列儲存著各個連續空間的位址,即陣列中儲存的都是指標,
由於 deque 容器底層將序列中的元素分別儲存到了不同段的連續空間中,因此要想實現迭代器的功能,必須先解決如下 2 個問題:
(1)迭代器在遍歷 deque 容器時,必須能夠確認各個連續空間在 map 陣列中的位置;
(2)迭代器在遍歷某個具體的連續空間時,必須能夠判斷自己是否已經處於空間的邊緣位置。如果是,則一旦前進或者後退,就需要跳躍到上乙個或者下乙個連續空間中。
基本方法
#include#includeinsert使用#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;
}
#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的最大差異,...