deque:雙端隊列
底層是一個雙向鏈表。
常用的有隊列的尾部入隊、首部出隊。
普通隊列:queue
queue 模板類的定義在<queue>頭文件中。
與stack 模板類很相似,queue 模板類也需要兩個模板參數,一個是元素類型,一個容器類
型,元素類型是必要的,容器類型是可選的,默認為deque 類型。
定義queue 對象的示例代碼如下:
queue<int> q1;
queue<double> q2;
queue 的基本操作有:
入隊,如例:q.push(x); 將x 接到隊列的末端。
出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最早被壓入隊列的元素。
訪問隊尾元素,如例:q.back(),即最后被壓入隊列的元素。
判斷隊列空,如例:q.empty(),當隊列空時,返回true。
訪問隊列中的元素個數,如例:q.size()
摘自:http://www.cnblogs.com/liubilan/p/9461141.html
deque - 雙向隊列
1.構造
無參構造:
deque<T> a; //<>內自定義數據類型;
帶參構造:
deque(beg,end); //構造函數將[beg, end)區間中的元素拷貝給本身。注意該區間是左閉右開的區間。 deque(n,elem); //構造函數將n個elem拷貝給本身。 deque(const deque &deq); //拷貝構造函數。
2.頭部&尾部的添加和刪除
deque.push_back(elem); //在容器尾部添加一個數據 deque.push_front(elem); //在容器頭部插入一個數據 deque.pop_back(); //刪除容器最后一個數據 deque.pop_front(); //刪除容器第一個數據
3.中間數據存取
deque.at(idx); //返回索引idx所指的數據,如果idx越界,拋出out_of_range。 deque[idx]; //返回索引idx所指的數據,如果idx越界,不拋出異常,直接出錯。 deque.front(); //返回第一個數據。 deque.back(); //返回最后一個數據
4.元素插入
deque.insert(pos,elem); //在pos位置插入一個elem元素的拷貝,返回新數據的位置。 deque.insert(pos,n,elem); //在pos位置插入n個elem數據,無返回值。 deque.insert(pos,beg,end); //在pos位置插入[beg,end)區間的數據,無返回值。
5.數據刪除
deque.clear(); //移除容器的所有數據 deque.erase(beg,end); //刪除[beg,end)區間的數據,返回下一個數據的位置。 deque.erase(pos); //刪除pos位置的數據,返回下一個數據的位置。
6.迭代指針
deque.begin(); //返回容器中第一個元素的迭代器。 deque.end(); //返回容器中最后一個元素之后的迭代器。 deque.rbegin(); //返回容器中倒數第一個元素的迭代器。 deque.rend(); //返回容器中倒數最后一個元素之后的迭代器。
7.賦值&拷貝
deque.assign(beg,end); //將[beg, end)區間中的數據拷貝賦值給本身。注意該區間是左閉右開的區間。 deque.assign(n,elem); //將n個elem拷貝賦值給本身。 deque& operator=(const deque &deq); //重載等號操作符 deque.swap(deq); // 將vec與本身的元素互換
8.大小&判斷非空
deque.size(); //返回容器中元素的個數 deque.empty(); //判斷容器是否為空 deque.resize(num); //重新指定容器的長度為num,若容器變長,則以默認值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。 deque.resize(num, elem); //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。