1. 程式人生 > >STL中deque,queue,stack,list的學習

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(); //反序