STL中deque,queue,stack,list的學習
(一):要點
1:容器deque的使用方法
2:容器queue,stack的使用方法
3:容器list的使用方法
(二)deque
1:deque簡介
deque是“double-ended queue”的縮寫,deque是雙端的,vector是單端的。
deque在介面上和vector相似,在許多操作的地方可以直接替換
deque可以隨機存取元素,支援索引值直接存取,使用[]或者是at()方法
deque的頭部和尾部新增和移除元素都非常快速,但是在中部插入元素或移除元素
比較費時。
2:deque的構造
//和vector基本相同
deque<int> de;
3:deque頭部和尾部新增或者是移除元素
deque.push_back(ele) ; // 尾部新增元素
deque.pop_back(); //尾部刪除元素
deque.push_front(ele) ; //頭部新增元素
deque.pop_front(); //頭部移除元素
4:deque的資料存取
deque.at[index]; //返回索引index所指的資料,如果越界,會跑出out_of_range
deque[index];//返回index所指的資料,越界的話,不會丟擲異常
deque.front(); //返回第一個元素
deque.back(); //返回最後一個元素
5:deque的迭代器
deque.begin(); //返回容器中第一個元素的迭代器
deque.end(); //返回容器中最後一個元素之後的迭代器
deque.rbegin(); //返回容器中倒數第一個元素的迭代器
deque.rend(); //返回容器中倒數最後一個元素之後的迭代器
6:deque帶引數的構造
deque(beg,end); //建構函式將區間[beg,end)區間的元素拷貝給本身,
//注意是左閉右開
deque(n,ele); //建構函式將n個ele拷貝給本身
deque(const deque &deq); //拷貝建構函式
7:deque的賦值
deque.assign(beg,end);
deque.assign(n,ele);
deque& operator=(const deque &deq);
deque.swap(deq); //將vec與本身的元素互換
8:deque的大小
包括size(),empty(),resize()
9:deque的插入
與vector是一樣的
10:deque的刪除
包括clear(),erase()等方法,與vector是一樣的。
(三)、queue 佇列
1:簡介
queue 是佇列容器,是一種“先進先出”的容器
queue是簡單的裝飾deque容器而成為另外一種容器。
2:建構函式與vector和deque是一樣的
3:queue的push和pop操作
由於queue是單向的,一個口插入,一個口輸出
queue.push(ele); //在後面插入一個元素
queue.pop(); //在前面彈出一個元素
例子:
queue<int> que;
que.push(10);
que.push(20);
que.push(30);
則插入之後,效果為:
則執行
que.pop();
que.pop();
que.pop();
輸出的效果為10,20,30
4:queue的拷貝,構造和複製
基本上和vector和qedue是一樣的
5:queue的資料存取
deque.back(); //獲取最後一個元素
deque.front(); //獲取第一個元素
6: queue的大小
queue.size(); //元素個數
queue.empty(); // queue是否為空
(四):stack
1:簡介
stack是先進後出
2:stack的拷貝,構造和複製都是一樣的
3:函式基本上和queue是一樣的
4:舉例
stack<int> s;
s.push(10);
s.push(20);
s.push(30);
則執行:
s.pop();
s.pop();
s.pop();
輸出的結果為:
30,20,10
(五):list容器
1:簡介
list是一個雙向連結串列容器,可高效的進行插入刪除元素
list不可以隨機存取元素,所以不支援at(pos)函式和[]操作
2: 事前準備
#include <list>
using namespace std;
3:list頭尾的新增移除操作
list.push_back(ele) ; // 尾部新增元素
list.pop_back(); //尾部刪除元素
list.push_front(ele) ; //頭部新增元素
list.pop_front(); //頭部移除元素
4:list與迭代器
list.begin(); //返回容器中第一個元素的迭代器
list.end(); //返回容器中最後一個元素之後的迭代器
list.rbegin(); //返回容器中倒數第一個元素的迭代器
list.rend(); //返回容器中倒數最後一個元素之後的迭代器
5:賦值,大小,插入,刪除等等都是一樣的
不過在刪除操作中多了一個remove元素:
list.remove(ele);
list.erase(index);
這兩個方法的區別就是remove是刪除所有與ele匹配的元素,
而erase()函式是將指定位置的元素移除掉
6:list的反序
list.reverse(); //反序