摘要:如果增加,默認(rèn)的構(gòu)造函數(shù)將這些新元素初始化為隊(duì)列當(dāng)前的元素個數(shù)交換兩個隊(duì)列兩個重載和小結(jié)向量容器,使用線性存儲結(jié)構(gòu),可以像數(shù)組一樣隨機(jī)下標(biāo)訪問元素,還可以在尾部插入元素用函數(shù)。
deque
特點(diǎn):
1.雙向隊(duì)列
2.使用時包含頭文件 #include
3.deque容器與vector類似,用動態(tài)數(shù)組來管理元素,支持隨機(jī)訪問。
4.與vector不同的是deque的動態(tài)數(shù)組首尾都開放,因此能夠在首尾進(jìn)行快速插入和刪除操作。
5.deque的內(nèi)部會維護(hù)一個map,即一小塊連續(xù)的空間,該空間中每個元素都是指針,指向另一段(較大的)區(qū)域,
這個區(qū)域稱為緩沖區(qū),緩沖區(qū)用來保存deque中的數(shù)據(jù)。因此deque在隨機(jī)訪問和遍歷數(shù)據(jù)會比vector慢。
注:
支持隨機(jī)訪問即支持[]及at()操作,但性能沒有vector好。
可以在內(nèi)部進(jìn)行插入和刪除操作,但性能沒有l(wèi)ist好。
因此最好采用deque的情形就是需要在兩端不斷的加入和刪除元素。
成員函數(shù)
構(gòu)造函數(shù)
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
01.dequeintdeuqe0; 02. 03.deque intdeuqe1 ( 3 ); 04. 05.deque intdeuqe2 ( 5, 2 ); 06. 07.deque intdeuqe4 (intdeuqe 2 );
常用的操作
assign()
擦除隊(duì)列中的元素并把新的元素復(fù)制到目標(biāo)隊(duì)列中
at(index) []
返回由index指定的位置上的元素
front()
返回第一個元素 (不檢查容器是否為空)
back()
返回最后一個元素(不檢查容器是否為空)
pop_back()
增加一元素到隊(duì)列尾
pop_front()
增加一元素到隊(duì)列頭
push_back()
刪除隊(duì)列尾的一個元素
push_front()
刪除隊(duì)列頭的一元素
empty()
判斷隊(duì)列是否為空,如果是空,返回true。
begin()
返回第一個元素的指針(iterator)
end()
返回最后一個元素的位置的指針(list為空時end()=begin())
clear()
從容器中刪除所有元素
erase(position)
刪除由position指定的位置上的元素
erase(beg,end)
刪除從beg到end-1之間的所有元素
insert(position, elem)
將elem的一個拷貝插入到由position指定的位置上,并返回新元素的位置
inser(position, n, elem)
將elem的n個拷貝插入到由 position指定的位置上
insert(position, beg, end)
將從beg到end-1之間的所有元素的拷貝插入到隊(duì)列中由position指定的位置上
resize(num)
將元素個數(shù)改為num。如果size()增加,默認(rèn)的構(gòu)造函數(shù)負(fù)責(zé)創(chuàng)建這些新元素
resize(num, elem)
將元素個數(shù)改為num。如果size()增加,默認(rèn)的構(gòu)造函數(shù)將這些新元素初始化為elem
size()
隊(duì)列當(dāng)前的元素個數(shù)
swap()
交換兩個隊(duì)列(兩個重載)
vector、list和deque 小結(jié)
vector:
向量容器,使用線性存儲結(jié)構(gòu),可以像數(shù)組一樣隨機(jī)(下標(biāo))訪問元素,還可以在尾部插入元素(用push_back()函
數(shù))。特點(diǎn):訪問元素速度快,但插入、刪除操作速度慢;
list:
鏈表容器,數(shù)據(jù)元素是通過鏈表指針串連成邏輯意義上的線性表,但在物理內(nèi)存中數(shù)據(jù)可以是不連續(xù)的。特點(diǎn):對鏈
表的任一位置的元素進(jìn)行插入、刪除和查找操作都是極快速的,但由于通過指針串連而成(這里的指針也占用了內(nèi)存空
間),不能通過下標(biāo)訪問元素,因此list容器訪問元素的速度比vector慢;
deque:
雙端隊(duì)列容器,跟vector一樣和采用線性表存儲結(jié)構(gòu),但與vector唯一不同的是,deque采用分塊的線性存儲結(jié)構(gòu)來
存儲數(shù)據(jù),每塊的大小一般為512字節(jié),稱為一個deque塊,所有的deque塊使用一個Map塊進(jìn)行管理,每個Map
數(shù)據(jù)項(xiàng)記錄各個deque塊的首地址。特點(diǎn):可以在deque塊的頭部和尾部插入和刪除元素而不需移動其他元素,所以
插入和刪除操作速度比vector快。一般來說,當(dāng)考慮到容器元素的內(nèi)存分配策略和操作的性能時,deque相對于
vector更有優(yōu)勢。
總結(jié):
一般來說,
當(dāng)訪問元素次數(shù)比較多時,用vector比較好;
當(dāng)插入、刪除、查找元素的次數(shù)比較多時,用list比較好;
當(dāng)訪問線性表的頭部和尾部、插入、刪除次數(shù)較多時,用deque比較好。
[cpp] view plaincopy在CODE上查看代碼片派生到我的代碼片
01.#include "stdafx.h" 02.#include03.#include 04.using namespace std; 05. 06.int main( ) 07.{ 08. deque deque0; 09. deque deque1; 10. deque ::iterator intiter0,intiter1; 11. 12. deque0.push_back(5); 13. deque0.push_back(6); 14. deque0.push_back(7); 15. 16. deque1.push_back(1); 17. deque1.push_back(2); 18. deque1.push_back(3); 19. 20. cout<<"deque0 :"; 21. for(intiter0=deque0.begin();intiter0!=deque0.end();intiter0++) 22. cout<<*intiter0<<" "; 23. cout<<" "; 24. 25. cout<<"deque1 :"; 26. for(intiter1=deque1.begin();intiter1!=deque1.end();intiter1++) 27. cout<<*intiter1<<" "; 28. cout<<" "; 29. 30. deque1.swap(deque0); 31. 32. cout<<"執(zhí)行swap,deque0 :"; 33. for(intiter0=deque0.begin();intiter0!=deque0.end();intiter0++) 34. cout<<*intiter0<<" "; 35. cout<<" "; 36. 37. cout<<"執(zhí)行swap,deque1 :"; 38. for(intiter1=deque1.begin();intiter1!=deque1.end();intiter1++) 39. cout<<*intiter1<<" "; 40. cout<<" "; 41. 42. getchar(); 43. return 0; 44.}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64114.html
摘要:拷貝構(gòu)造函數(shù)示例構(gòu)造無參構(gòu)造函數(shù)總結(jié)容器和容器的構(gòu)造方式幾乎一致,靈活使用即可賦值操作功能描述給容器進(jìn)行賦值函數(shù)原型重載等號操作符將區(qū)間中的數(shù)據(jù)拷貝賦值給本身。清空容器的所有數(shù)據(jù)刪除區(qū)間的數(shù)據(jù),返回下一個數(shù)據(jù)的位置。 ...
摘要:例如容器適配器讓一種已存在的容器類型采用另一種不同的抽象類型的工作方式實(shí)現(xiàn)。知道了容器適配器接下來先來講。的介紹隊(duì)列是一種容器適配器,專門用于在上下文先進(jìn)先出中操作,其中從容器一端插入元素,另一端提取元素。 ...
摘要:注意當(dāng)中的和屬于容器適配器,它們默認(rèn)使用的基礎(chǔ)容器分別是和??截悩?gòu)造類型容器的復(fù)制品方式三使用迭代器拷貝構(gòu)造某一段內(nèi)容。若待插入元素的鍵值在當(dāng)中已經(jīng)存在,則函數(shù)插入失敗,并返回當(dāng)中鍵值為的元素的迭代器和。返回該迭代器位置元素的值。 ...
摘要:本文介紹了的常用接口的使用,并對其進(jìn)行了模擬實(shí)現(xiàn),包括迭代器的實(shí)現(xiàn)。與為反向迭代器,對迭代器執(zhí)行操作,迭代器向前移動。 本文介紹了list的常用接口的使用,并對其進(jìn)行了模擬實(shí)現(xiàn),包括list迭代器的實(shí)現(xiàn)。 目錄 一、list的介紹 二、list的常用接口的使用 1. list的構(gòu)造 2. l...
閱讀 2381·2021-10-11 10:59
閱讀 2643·2021-10-11 10:58
閱讀 3353·2021-09-08 09:35
閱讀 3921·2021-09-02 15:21
閱讀 1519·2019-08-30 15:53
閱讀 2666·2019-08-29 14:16
閱讀 2118·2019-08-26 14:00
閱讀 2998·2019-08-26 13:52