std::deque、std::queue、std::stack、std::list 內容概要
阿新 • • 發佈:2019-01-06
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值填充新位置。如果容器變短,則末尾超出容器長度的元素被刪除。
例如 deqInt
是deque<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元素。