【通俗易懂C++ STL模板庫(kù)】Deque 容器

Deque 簡(jiǎn)介

deque 是“double-ended queue ”的縮寫廊蜒, 和 vector 一樣都是 STL的容器铜异, deque 是雙 端數(shù)組 黔州,而 vector 是單端的键思。?

deque 在接口上和 vector 非常相似衩藤,在許多操作的地方可以直接替換。?

deque 可以隨機(jī)存取元素驳糯。?

deque 頭部和尾部添加或移除元素都非称螅快速。但是在中部安插元素或移除元素比 較費(fèi)時(shí)酝枢。

#include <deque>?

deque 對(duì)象的默認(rèn)構(gòu)造

deque 采用模板類實(shí)現(xiàn)恬偷, deque 對(duì)象的默認(rèn)構(gòu)造形式: deque<T> deqT; deque <int> deqInt; // 一個(gè)存放 int 的 deque 容器。?

deque <float> deq Float; // 一個(gè)存放 float 的 deque 容器帘睦。?

deque <string> deq String; // 一個(gè)存放 string 的 deque 容器袍患。

// 尖括號(hào)內(nèi)還可以設(shè)置指針類型或自定義類型。

deque 末尾的添加移除操作

理論知識(shí) :?

deque.push_back(elem); // 在容器尾部添加一個(gè)數(shù)據(jù)?

deque.push_front(elem); // 在容器頭部插入一個(gè)數(shù)據(jù)?

deque.pop_back(); // 刪除容器最后一個(gè)數(shù)據(jù)?

deque.pop_front(); // 刪除容器第一個(gè)數(shù)據(jù)

deque<int> deqInt;?

deqInt.push_back(1);?

deqInt.push_back(3);?

deqInt.push_back(5);?

deqInt.push_back(7);?

deqInt.push_back(9);?

deqInt.pop_front();?

deqInt.pop_front();?

deqInt.push_front(11);?

deqInt.push_front(13);?

deqInt.pop_back();?

deqInt.pop_back();?

//deqInt { 13,11,5}?

deque 的數(shù)據(jù)存取

理論知識(shí) :?

deque.at(idx);?

// 返回索引 idx 所指的數(shù)據(jù)竣付,如果 idx 越界诡延,拋出 out_of_range?

?deque[idx];

?// 返回索引 idx 所指的數(shù)據(jù),如果 idx 越界古胆,不拋出異常肆良,直接出錯(cuò)筛璧。 deque.front();

?// 返回第一個(gè)數(shù)據(jù)。 deque.back(); // 返回最后一個(gè)數(shù)據(jù)

deque<int> deqInt;?

deqInt.push_back(1);?

deqInt.push_back(3);?

deqInt.push_back(5);?

deqInt.push_back(7);?

deqInt.push_back(9);?

int iA = deqInt.at(0); //1?

int iB = deqInt[1]; //3?

deqInt.at(0) = 99; //99?

deqInt[1] = 88; //88?

int iFront = deqInt.front(); //99?

int iBack = deqInt.back(); //9?

deqInt.front() = 77;? //77?

deqInt.back() = 66; //66?

deque 與迭代器

理論知識(shí)?

deque.begin(); // 返回容器中第一個(gè)元素的迭代器惹恃。?

deque.end(); // 返回容器中最后一個(gè)元素之后的迭代器夭谤。?

deque.rbegin(); // 返回容器中倒數(shù)第一個(gè)元素的迭代器。?

deque.rend(); // 返回容器中倒數(shù)最后一個(gè)元素之后的迭代器巫糙。

deque<int> deqInt;?

deqInt.push_back(1);?

deqInt.push_back(3);?

deqInt.push_back(5);?

deqInt.push_back(7);?

deqInt.push_back(9);?

for (deque<int>::iterator it=deqInt.begin(); it!=deqInt.end(); ++it)?

{?

cout << *it;?

cout << "";?

}?

for (deque<int>::reverse_iterator rit=deqInt.rbegin(); rit!=deqInt.rend(); ++rit)?

{?

cout << *rit;?

cout << "";?

}?

deque 對(duì)象的帶參數(shù)構(gòu)造

理論知識(shí) deque(beg,end); // 構(gòu)造函數(shù)將 [beg, end)區(qū)間中的元素拷貝給本身朗儒。注意該區(qū)間 是左閉右開的區(qū)間。 deque(n,elem); // 構(gòu)造函數(shù)將 n 個(gè) elem 拷貝給本身参淹。 deque(const deque &deq); // 拷貝構(gòu)造函數(shù)采蚀。

deque<int> deqIntA;?

deqIntA.push_back(1);?

deqIntA.push_back(3);?

deqIntA.push_back(5);?

deqIntA.push_back(7);?

deqIntA.push_back(9);?

deque<int> deqIntB(deqIntA.begin(),deqIntA.end()); //1 3 5 7 9?

deque<int> deqIntC(5,8); //8 8 8 8 8?

deque<int> deqIntD(deqIntA); //1 3 5 7 9?

deque 的賦值

理論知識(shí)

?deque.assign(beg,end);?

// 將[beg, end)區(qū)間中的數(shù)據(jù)拷貝賦值給本身。 注意該區(qū)間 是左閉右開的區(qū)間承二。 deque.assign(n,elem); // 將 n 個(gè) elem 拷貝賦值給本身。?

deque& operator=(const deque &deq); // 重載等號(hào)操作符?

deque.swap(deq); // 將 vec 與本身的元素互換

deque<int> deqIntA,deqIntB,deqIntC,deqIntD;?

deqIntA.push_back(1);?

deqIntA.push_back(3);?

deqIntA.push_back(5);?

deqIntA.push_back(7);?

deqIntA.push_back(9);?

deqIntB.assign(deqIntA.begin(),deqIntA.end()); // 1 3 5 7 9?

deqIntC.assign(5,8); //8 8 8 8 8?

deqIntD = deqIntA;? //1 3 5 7 9?

deqIntC.swap(deqIntD);? // 互換

deque 的大小

理論知識(shí)?

deque.size(); // 返回容器中元素的個(gè)數(shù)?

deque.empty();? // 判斷容器是否為空?

deque.resize(num); // 重新指定容器的長(zhǎng)度為 num纲爸,若容器變長(zhǎng)亥鸠,則以默認(rèn)值填充 新位置。如果容器變短识啦,則末尾超出容器長(zhǎng)度的元素被刪除负蚊。 deque.resize(num, elem); // 重新指定容器的長(zhǎng)度為 num,若容器變長(zhǎng)颓哮,則以 elem 值填充新位置家妆。如果容器變短,則末尾超出容器長(zhǎng)度的元素被刪除冕茅。

deque<int> deqIntA;?

deqIntA.push_back(1);?

deqIntA.push_back(3);?

deqIntA.push_back(5);?

int iSize = deqIntA.size(); //3?

if (!deqIntA.empty())?

{?

????deqIntA.resize(5); //1 3 5 0 0?

????deqIntA.resize(7,1); / /1 3 5 0 0 1 1?

????deqIntA.resize(2); //1 3?

}?

deque 的插入

理論知識(shí)?

deque.insert(pos,elem); // 在 pos位置插入一個(gè) elem 元素的拷貝伤极,返回新數(shù)據(jù)的位置。?

deque.insert(pos,n,elem); // 在 pos 位置插入 n 個(gè) elem 數(shù)據(jù)姨伤,無(wú)返回值哨坪。 deque.insert(pos,beg,end); // 在 pos 位置插入 [beg,end) 區(qū)間的數(shù)據(jù),無(wú)返回值乍楚。

deque<int> deqA;?

deque<int> deqB;?

deqA.push_back(1);?

deqA.push_back(3);?

deqA.push_back(5);?

deqA.push_back(7);?

deqA.push_back(9);?

deqB.push_back(2);?

deqB.push_back(4);?

deqB.push_back(6);?

deqB.push_back(8);?

deqA.insert(deqA.begin(), 11); //{11, 1, 3, 5, 7, 9}?

deqA.insert(deqA.begin()+1,2,33);? //{11,33,33,1,3,5,7,9}?

deqA.insert(deqA.begin() , deqB.begin() , deqB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}?

deque 的刪除

理論知識(shí)?

deque.clear(); // 移除容器的所有數(shù)據(jù)?

deque.erase(beg,end); // 刪除 [beg,end) 區(qū)間的數(shù)據(jù)当编,返回下一個(gè)數(shù)據(jù)的位置。?

deque.erase(pos); // 刪除 pos 位置的數(shù)據(jù)徒溪,返回下一個(gè)數(shù)據(jù)的位置忿偷。

刪除區(qū)間內(nèi)的元素?

deqInt 是用 deque<int> 聲明的容器,現(xiàn)已包含按順序的 1,3,5,6,9 元素臊泌。

deque<int>::iterator itBegin=deqInt.begin()+1;?

deque<int>::iterator itEnd=deqInt.begin()+3;?

deqInt.erase(itBegin,itEnd); // 此時(shí)容器 deqInt 包含按順序的 1,6,9 三個(gè)元素鲤桥。

假設(shè) deqInt 包含 1,3,2,3,3,3,4,3,5,3,刪除容器中等于 3 的元素 for(deque<int>::iterator it=deqInt.being(); it!=deqInt.end(); ) // 小括號(hào)里不需寫 ++it?

{?

if(*it == 3)?

{?

it = deqInt.erase(it); // 以迭代器為參數(shù)缺虐,刪除元素 3芜壁,并把數(shù)據(jù)刪除后的 下一個(gè)元素位置返回給迭代器。 // 此時(shí),不執(zhí)行 ++it慧妄; }?

else?

{?

????????++it;?

}?

}?

每天進(jìn)步一點(diǎn)點(diǎn)顷牌,如果有用給小編點(diǎn)個(gè)贊

專注Linux C/C++和算法知識(shí)學(xué)習(xí)分享總結(jié)

歡迎關(guān)注交流共同進(jìn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塞淹,隨后出現(xiàn)的幾起案子窟蓝,更是在濱河造成了極大的恐慌,老刑警劉巖饱普,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运挫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡套耕,警方通過(guò)查閱死者的電腦和手機(jī)谁帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冯袍,“玉大人匈挖,你說(shuō)我怎么就攤上這事】捣撸” “怎么了儡循?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)征冷。 經(jīng)常有香客問(wèn)我择膝,道長(zhǎng),這世上最難降的妖魔是什么检激? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任肴捉,我火速辦了婚禮,結(jié)果婚禮上呵扛,老公的妹妹穿的比我還像新娘每庆。我一直安慰自己,他們只是感情好今穿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布缤灵。 她就那樣靜靜地躺著,像睡著了一般蓝晒。 火紅的嫁衣襯著肌膚如雪腮出。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天芝薇,我揣著相機(jī)與錄音胚嘲,去河邊找鬼。 笑死洛二,一個(gè)胖子當(dāng)著我的面吹牛馋劈,可吹牛的內(nèi)容都是我干的攻锰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼妓雾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼娶吞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起械姻,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妒蛇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后楷拳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绣夺,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年欢揖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陶耍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡她混,死狀恐怖物臂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情产上,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布蛾狗,位于F島的核電站晋涣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沉桌。R本人自食惡果不足惜谢鹊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望留凭。 院中可真熱鬧佃扼,春花似錦、人聲如沸蔼夜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)求冷。三九已至瘤运,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匠题,已是汗流浹背拯坟。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韭山,地道東北人郁季。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓冷溃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親梦裂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子似枕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容