Cpp淺析系列-STL之deque

前言

雙端隊(duì)列的元素可以從兩端彈出,其限定插入和刪除操作都可以在表的兩端進(jìn)行。

相比于隊(duì)列,雙端隊(duì)列就好在允許雙端操作這里了。

CPP

Deque

定義

#include?<deque>
using?namespace?std;

//?定義一個(gè)空對(duì)象
deque<int>?deque0;

//?定義并初始化一個(gè)含有五個(gè)參數(shù)的對(duì)象
deque<int>?deque1{1,?2,?3,?4,?5};

常規(guī)操作

增加元素

//插入函數(shù)
deque0.push_front(3);//頭部插入
deque0.push_back(2);//尾部插入

遍歷元素

也可以用類似數(shù)組的操作,直接取值!

可以用雙向迭代器:

  • r就是反向,單詞應(yīng)該是reback的首字母;
  • c就常量,單詞應(yīng)該是const的首字母。
成員函數(shù) 功能
begin() 返回指向容器中第一個(gè)元素的正向迭代器;如果是 const 類型容器,在該函數(shù)返回的是常量正向迭代器。
end() 返回指向容器最后一個(gè)元素之后一個(gè)位置的正向迭代器;如果是 const 類型容器,在該函數(shù)返回的是常量正向迭代器。此函數(shù)通常和 begin() 搭配使用。
rbegin() 返回指向最后一個(gè)元素的反向迭代器;如果是 const 類型容器,在該函數(shù)返回的是常量反向迭代器。
rend() 返回指向第一個(gè)元素之前一個(gè)位置的反向迭代器。如果是 const 類型容器,在該函數(shù)返回的是常量反向迭代器。此函數(shù)通常和 rbegin() 搭配使用。
cbegin() 常量正向迭代器,不能用于修改元素。
cend() 常量正向迭代器,不能用于修改元素。
crbegin() 常量反向迭代器,不能用于修改元素。
crend() 常量反向迭代器,不能用于修改元素。
迭代器的具體功能示意圖

對(duì)象名字iter就是對(duì)應(yīng)的隨機(jī)訪問迭代器,可以支持:

  • iter+=i:使得 iter 往后移動(dòng) i 個(gè)元素。
  • iter-=i:使得 iter 往前移動(dòng) i 個(gè)元素。
  • iter+i:返回 iter 后面第 i 個(gè)元素的迭代器。
  • iter-i:返回 iter 前面第 i 個(gè)元素的迭代器
  • iter[i]:返回 iter 后面第 i 個(gè)元素的引用。
//查詢
if?(!deque1.empty())?{?//若true,則deque中無元素
????//順序遍歷,跟數(shù)組一樣可以直接取值!
????for?(int?i?=?0;?i?<?deque1.size();?i++)
????????cout?<<?deque1[i]?<<?"?";
????cout?<<?endl;

????//正向迭代器遍歷
????for?(deque<int>::iterator?iter?=?deque1.begin();?iter?!=?deque1.end();?iter++)
????????cout?<<?*iter?<<?"?";
????cout?<<?endl;

????//反向迭代器遍歷
????for?(deque<int>::reverse_iterator?iter?=?deque1.rbegin();?iter?!=?deque1.rend();?iter++)
????????cout?<<?*iter?<<?"?";
????cout?<<?endl;
}

如果臨時(shí)記不住指針的類型,可以用auto關(guān)鍵字代替!

刪除元素

//刪除函數(shù),無返回值
?deque0.pop_front();//去頭
?deque0.pop_back();//去尾
?deque0.clear();//清空

元素個(gè)數(shù)

int?size?=?deque0.size();

排序

#include?<algorithm>
using?namespace?std;
//利用算法實(shí)現(xiàn)對(duì)deque容器進(jìn)行排序

sort(deque0.begin(),deque0.end());

對(duì)于自定義的類型,則需要重載operator<operator==,然后重新調(diào)用該算法就可以了。具體例子在其他文章中,不在此復(fù)述。

感謝

感謝現(xiàn)在努力的自己。

感謝現(xiàn)在的好奇,為了能成為更好的自己。

deque容器迭代器用法詳解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容