c++STL學習——deque
阿新 • • 發佈:2018-12-21
雙端佇列(deque)
Deque簡介
- deque是“double-ended queue”的縮寫,和vector一樣都是STL的容器,deque是雙端陣列,而vector是單端的。
- deque在介面上和vector非常相似,在許多操作的地方可以直接替換。
- deque可以隨機存取元素(支援索引值直接存取, 用[]操作符或at()方法,這個等下會詳講)。
- deque頭部和尾部新增或移除元素都非常快速。但是在中部安插元素或移除元素比較費時。
- 標頭檔案#include
deque物件的預設構造
deque採用模版類實現,預設構造形式:deque<T> deqT
deque<int> deqInt; //一個存放int的deque容器
deque<double> deqDouble; //一個存放double的容器
deque<string> deqString; //一個存放string的容器
//尖括號內還可以存放設定指標型別或其他自定義型別
deque末尾的新增或移除操作
push_back(elem); //在容器尾部加入一個元素
push_front(elem); //在容器頭部加入一個元素
pop_back(); //刪除尾部元素
pop_front(); //刪除頭部元素
deque資料的存取
deque.at (idx); //返回索引idx所指的資料,如果idx越界,丟擲out_of_range。
deque[idx]; //返回索引idx所指的資料,如果idx越界,不丟擲異常,直接出錯。
deque.front(); //返回第一個元素
deque.back(); //返回最後一個元素
deque與迭代器
deque.begin(); //返回第一個元素的迭代器
deque.end(); //返回最後一個元素之後的迭代器
deque.rbegin(); //返回指向尾部的逆向迭代器
deque.rend(); //返回指向頭部的逆向迭代器
deque的大小
deque.size(); //返回容器中元素的個數
deque. empty(); //判斷容器是否為空
deque.resize(num); //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。
deque.resize(num,elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。
deque的插入
deque.insert(pos,elem); //在pos位置插入一個elem元素的拷貝,返回新資料的位置。
deque.insert(pos,n,elem); //在pos位置插入n個elem資料,無返回值。
deque.insert(pos,beg,end); //在pos位置插入[beg,end)區間的資料,無返回值。
deque的刪除
deque.clear(); //移除容器的所有內容
deque.erase(beg,end); //刪除[beg,end)區間的資料,返回下一個資料的位置。
deque.erase(pos); //刪除pos位置的資料,返回下一個資料的位置。
程式碼演示
刪除容器中重複的元素
#include<iostream>
#include<deque>
#include<iterator>
using namespace std;
int main()
{
int a[10]={1,3,2,3,3,3,4,3,5,3};
deque<int> deInt(a,a+10);
cout<<deInt.size()<<endl; //10
for(deque<int>::iterator it=deInt.begin();it!=deInt.end();)
{
if(*it==3)
it=deInt.erase(it); //刪除迭代器所指元素,並返回下一個元素的迭代器
else
it++;
}
for(deque<int>::iterator it=deInt.begin();it!=deInt.end();it++)
{
cout<<*it<<" "; //1 2 4 5
}
cout<<endl;
deInt.erase(deInt.begin(),deInt.end());
cout<<deInt.size()<<endl; //0
return 0;
}