STL之deque详解
生活随笔
收集整理的這篇文章主要介紹了
STL之deque详解
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Deuqe概念
? ? ? ? 容器deque和vector非常相似,屬于序列式容器。都是采用動(dòng)態(tài)數(shù)組來(lái)管理元素,提供隨機(jī)存取,并且有著和vector一樣的接口。不同的是deque具有首尾兩端進(jìn)行快速插入、刪除的能力。
Deque結(jié)構(gòu)
? ? ? ? 如圖1是deque的邏輯結(jié)構(gòu),從表面上看,deque具有連續(xù)性的存儲(chǔ)空間,并支持隨機(jī)存取功能。實(shí)際上deque并不是我們所看到的樣子,其內(nèi)部結(jié)構(gòu),如圖2所示。 deque在實(shí)現(xiàn)上主要有以下兩點(diǎn): 1.由一段一段的定量連續(xù)空間構(gòu)成,第一個(gè)區(qū)塊朝某個(gè)方向擴(kuò)展,最后一個(gè)區(qū)塊朝相反方向擴(kuò)展; 2.管理這些分段的定量連續(xù)空間,維護(hù)其整體連續(xù)的假象,并提供隨機(jī)存取的接口;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 1 deque的邏輯結(jié)構(gòu) ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2 ?deque的內(nèi)部結(jié)構(gòu)
Deque的能力
?與vector相比,deque功能上的不同之處在于:- 首尾兩端都能快速的安插、刪除元素,因此需要在兩端安插、刪除元素時(shí),最好采用deque。
- ?存在元素時(shí),deque的內(nèi)部結(jié)構(gòu)會(huì)多一個(gè)間接過(guò)程,操作元素的效率會(huì)比vector低一些。
- 迭代器需要在不同區(qū)塊間跳轉(zhuǎn),所以必須是特殊的智能指針,非一般指針。
- deque不支持對(duì)容量和內(nèi)存重分配時(shí)機(jī)的控制,除了首尾兩端安插、刪除元素外,其他地方安插、刪除元素都將導(dǎo)致元素的pointer、reference、iterator失效。不過(guò),deque的內(nèi)存重分配機(jī)制優(yōu)于vector,因?yàn)閐eque不必在內(nèi)存重分配時(shí)復(fù)制所有的元素。
- deque的內(nèi)存區(qū)塊不再被使用時(shí),會(huì)被釋放。
舉例
? ? ? ?我們操作deque時(shí),不需要關(guān)心其內(nèi)部結(jié)構(gòu)的實(shí)現(xiàn),我們按照deque的邏輯結(jié)構(gòu)進(jìn)行操作,可以認(rèn)為deque是動(dòng)態(tài)的一維數(shù)組,可在首尾進(jìn)行插入、刪除操作,下標(biāo)從0開(kāi)始。 #include "stdafx.h" #include <deque> #include <string> #include <iostream> #include <algorithm>using namespace std;void DequeExample() {deque<string> strDeq;//空隊(duì)列strDeq.assign(3, string("string"));//賦值//打印deque的內(nèi)容for (unsigned i = 0; i < strDeq.size(); i++){cout << "strDeq[" << i << "] :" << strDeq[i] << endl;}cout << "push_front and push_back elem to deque" << endl;//首尾插入元素strDeq.push_front("first string");strDeq.push_back("last string");//打印deque的內(nèi)容for (unsigned i = 0; i < strDeq.size(); i++){cout << "strDeq[" << i << "] :" << strDeq[i] << endl;}cout << "pop_front and pop_back elem from deque" << endl;//首尾彈出元素strDeq.pop_front();strDeq.pop_back();//打印deque的內(nèi)容for (unsigned i = 0; i < strDeq.size(); i++){cout << "strDeq[" << i << "] :" << strDeq[i] << endl;} }運(yùn)行結(jié)果
? ? ? ? ??參考文章: ? ? ? ?1.http://blog.csdn.net/xiajun07061225/article/details/7442816
? ? ? ?2.http://blog.csdn.net/hackbuteer1/article/details/7729451
轉(zhuǎn)載于:https://www.cnblogs.com/jinxiang1224/p/8468418.html
總結(jié)
以上是生活随笔為你收集整理的STL之deque详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习进度条——第八周
- 下一篇: 安装交叉编译环境