1. 程式人生 > >c++STL學習——deque

c++STL學習——deque

雙端佇列(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;

}