1. 程式人生 > >std::deque、std::queue、std::stack、std::list 內容概要

std::deque、std::queue、std::stack、std::list 內容概要

deque

deque的簡介

  • deque是“double-ended queue”的縮寫,和vector一樣都是STL的容器,deque是雙端的,而vector是單端的。
  • deque在介面上和vector非常相似,在許多操作的地方可以直接替換。
  • deque可以隨機存取元素(支援索引值直接存取, 用[]操作符或at()方法,這個等下會詳講)。
  • deque頭部和尾部新增或移除元素都非常快速。但是在中部安插元素或移除元素比較費時。

deque物件的預設構造

deque採用模板類實現,deque物件的預設構造形式:deque<T>
deqT; 如: deque <int> deqInt; //一個存放int的deque容器。 deque <float> deq Float; //一個存放float的deque容器。 deque <string> deq String; //一個存放string的deque容器。 ... //尖括號內還可以設定指標型別或自定義型別。

deque末尾的新增移除操作

deque.push_back(elem);	//在容器尾部新增一個數據
deque.push_front(elem);	//在容器頭部插入一個數據
deque.
pop_back(); //刪除容器最後一個數據 deque.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(beg,end);    //建構函式將[beg, end)區間中的元素拷貝給本身。注意該區間是左閉右開的區間。

deque(n,elem);   //建構函式將n個elem拷貝給本身。

deque(const deque  &deq);  //拷貝建構函式。

deque的賦值

deque.assign(beg,end);    //將[beg, end)區間中的資料拷貝賦值給本身。注意該區間是左閉右開的區間。

deque.assign(n,elem);  //將n個elem拷貝賦值給本身。

deque& operator=(const deque &deq);	//過載等號操作符

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

deque的大小

deque.size();	   //返回容器中元素的個數
deque.empty();	   //判斷容器是否為空
deque.resize(num);   //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。
deque.resize(num, elem);  //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。

例如 deqIntdeque<int> 宣告的容器,現已包含1,2,3元素。
執行deqInt.resize(5); //此時裡面包含1,2,3,0,0元素
再執行deqInt.resize(8,3); //此時裡面包含1,2,3,0,0,3,3,3元素
再執行deqInt.resize(2); //此時裡面包含1,2元素

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位置的資料,返回下一個資料的位置。

queue

queue的簡介

  • queue是佇列容器,是一種“先進先出”的容器。
  • queue是簡單地裝飾deque容器而成為另外的一種容器。

queue物件的預設構造

queue採用模板類實現,
queue物件的預設構造形式:queue<T> queT;

如:

queue<int> queInt;            //一個存放int的queue容器。
queue<float> queFloat;     //一個存放float的queue容器。
queue<string> queString;     //一個存放string的queue容器。
...				    
//尖括號內還可以設定指標型別或自定義型別。

queue的push與pop操作

queue.push(elem);   //往隊尾新增元素
queue.pop();   //從隊頭移除第一個元素

queue的push與pop操作

queue.push(elem);   //往隊尾新增元素
queue.pop();   //從隊頭移除第一個元素

queue物件的拷貝構造與賦值

queue(const queue &que);		     //拷貝建構函式
queue& operator=(const queue &que);	//過載等號操作符

如:

queue<int> queIntA, queIntC;
…
queue<int> queIntB(queIntA);
queue<int> queIntD;
queIntD = queIntC;

queue的資料存取

queue.back();   //返回最後一個元素
queue.front();   //返回第一個元素

queue的大小

queue.empty();   //判斷佇列是否為空
queue.size(); 	     //返回佇列的大小

stack

stack的簡介

  • stack是堆疊容器,是一種“先進後出”的容器。
  • stack是簡單地裝飾deque容器而成為另外的一種容器。

stack物件的預設構造

stack採用模板類實現,
stack物件的預設構造形式: stack <T> stkT;

如:

stack <int> stkInt;            //一個存放int的stack容器。
stack <float> stkFloat;     //一個存放float的stack容器。
stack <string> stkString;     //一個存放string的stack容器。
...				    
//尖括號內還可以設定指標型別或自定義型別。

stack的push與pop操作

stack.push(elem);   //往棧頭新增元素
stack.pop();   //從棧頭移除第一個元素
```'

### stack物件的拷貝構造與賦值
```cpp
stack(const stack &stk);		     //拷貝建構函式
stack& operator=(const stack &stk);	//過載等號操作符
如:
stack<int> stkIntA, stkIntC;
…
stack<int> stkIntB(stkIntA);
stack<int> stkIntD;
stkIntD = stkIntC;

stack的資料存取

stack.top();	  //返回最後一個壓入棧元素

stack的大小

stack.empty();   //判斷堆疊是否為空
stack.size(); 	     //返回堆疊的大小

list

list的簡介

  • list是一個雙向連結串列容器,可高效地進行插入刪除元素。
  • list不可以隨機存取元素,所以不支援at.(pos)函式與[]操作符。

list物件的預設構造

list採用模板類實現,
list物件的預設構造形式:list<T> lstT;

如:

list<int> lstInt;            //定義一個存放int的list容器。
list<float> lstFloat;     //定義一個存放float的list容器。
list<string> lstString;     //定義一個存放string的list容器。
...				    
//尖括號內還可以設定指標型別或自定義型別。

list頭尾的新增移除操作

list.push_back(elem);	   //在容器尾部加入一個元素
list.pop_back();              //刪除容器中最後一個元素
list.push_front(elem);     //在容器開頭插入一個元素
list.pop_front();              //從容器開頭移除第一個元素

list的資料存取

list.front();   //返回第一個元素。
list.back();  //返回最後一個元素。

list與迭代器

list.begin();                     //返回容器中第一個元素的迭代器。
list.end();                       //返回容器中最後一個元素之後的迭代器。
list.rbegin();         //返回容器中倒數第一個元素的迭代器。
list.rend();         //返回容器中倒數最後一個元素的後面的迭代器。

list物件的帶引數構造

list(beg,end);    //建構函式將[beg, end)區間中的元素拷貝給本身。注意該區間是左閉右開的區間。

list(n,elem);   //建構函式將n個elem拷貝給本身。

list(const list &lst);  //拷貝建構函式。

list的賦值

list.assign(beg,end);    //將[beg, end)區間中的資料拷貝賦值給本身。注意該區間是左閉右開的區間。

list.assign(n,elem);  //將n個elem拷貝賦值給本身。

list& operator=(const list &lst);	//過載等號操作符

list.swap(lst);  // 將lst與本身的元素互換。

list的大小

list.size();	   //返回容器中元素的個數
list.empty();	   //判斷容器是否為空
list.resize(num);   //重新指定容器的長度為num,若容器變長,則以預設值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。
list.resize(num, elem);  //重新指定容器的長度為num,若容器變長,則以elem值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。

list的插入

list.insert(pos,elem);   //在pos位置插入一個elem元素的拷貝,返回新資料的位置。
list.insert(pos,n,elem);   //在pos位置插入n個elem資料,無返回值。
list.insert(pos,beg,end);   //在pos位置插入[beg,end)區間的資料,無返回值。

list的刪除

list.clear();										    //移除容器的所有資料
list.erase(beg,end);  //刪除[beg,end)區間的資料,返回下一個資料的位置。
list.erase(pos);    //刪除pos位置的資料,返回下一個資料的位置。
lst.remove(elem);   //刪除容器中所有與elem值匹配的元素。

list的反序排列

lst.reverse();     //反轉連結串列,比如lst包含1,3,5元素,執行此方法後,lst就包含5,3,1元素。