先進先出
先進後出
從上面原始碼可以看出實際上它們兩者的底層就是使用deque;可以參考我的這篇文章dequeue原始碼剖析
所以queue和stack可以說是容器介面卡
看完原始碼我也在找迭代器,但是沒有發現,最後我才明白,這是為了不能隨意插入、刪除,所有的操作只能在兩端完成。因為這滿足佇列和棧的特性。
而且底層也是可以用其它容器實現的。請看上圖。
看看queue支援的函式
員函式功能
empty()
如果 queue 中沒有元素的話,返回 true。
size()
返回 queue 中元素的個數。
front()
返回 queue 中第乙個元素的引用。如果 queue 是常量,就返回乙個常引用;如果 queue 為空,返回值是未定義的。
back()
返回 queue 中最後乙個元素的引用。如果 queue 是常量,就返回乙個常引用;如果 queue 為空,返回值是未定義的。
push(const t& obj)
在 queue 的尾部新增乙個元素的副本。這是通過呼叫底層容器的成員函式 push_back() 來完成的。
emplace()
在 queue 的尾部直接新增乙個元素。
push(t&& obj)
以移動的方式在 queue 的尾部新增元素。這是通過呼叫底層容器的具有右值引用引數的成員函式 push_back() 來完成的。
pop()
刪除 queue 中的第乙個元素。
swap(queue &other_queue)
將兩個 queue 容器介面卡中的元素進行互換,需要注意的是,進行互換的 2 個 queue 容器介面卡中儲存的元素型別以及底層採用的基礎容器型別,都必須相同。
例子:
#include
#include
using namespace std;
intmain()
; std:
:queue<
int>
my_queue
(values);//
//檢視 my_queue 儲存元素的個數
cout <<
"size of my_queue: "
<< my_queue.
size()
<< endl;
//訪問 my_queue 中的元素
while
(!my_queue.
empty()
)system
("pause");
return0;
}
satck的函式
成員函式
功能empty()
當 stack 棧中沒有元素時,該成員函式返回 true;反之,返回 false。
size()
返回 stack 棧中儲存元素的個數。
top()
返回乙個棧頂元素的引用,型別為 t&。如果棧為空,程式會報錯。
push(const t& val)
先複製 val,再將 val 副本壓入棧頂。這是通過呼叫底層容器的 push_back() 函式完成的。
push(t&& obj)
以移動元素的方式將其壓入棧頂。這是通過呼叫底層容器的有右值引用引數的 push_back() 函式完成的。
pop()
彈出棧頂元素。
emplace(arg…)
arg… 可以是乙個引數,也可以是多個引數,但它們都只用於構造乙個物件,並在棧頂直接生成該物件,作為新的棧頂元素。
swap(stack & other_stack)
將兩個 stack 介面卡中的元素進行互換,需要注意的是,進行互換的 2 個 stack 介面卡中儲存的元素型別以及底層採用的基礎容器型別,都必須相同。
例子:
#include
#include
#include
using namespace std;
intmain()
; stack<
int, list<
int>>
my_stack
(values)
;//檢視 my_stack 儲存元素的個數
cout <<
"size of my_stack: "
<< my_stack.
size()
<< endl;
//將 my_stack 中儲存的元素依次彈棧,直到其為空
while
(!my_stack.
empty()
)system
("pause");
return0;
}
spring security認證原始碼剖析
spring security 和shiro目前最主流的安全框架,很好的保護了系統的安全性。shiro實現的原理和spring security具有異曲同工之妙,學會乙個框架,另乙個框架也會很容易上手。1 spring security流程 usernamepasswordauthenticatio...
STL 原始碼閱讀
1 這裡可以看出來,容器將迭代器作為類成員。vectora iteratorite a.begin 容器的成員函式可以返回迭代器,所以迭代器是容器的成員物件。2 個人理解,迭代器是對指標的封裝和提公升,盡可能遮蔽資料結構的底層細節,對外提供統一的操作介面,這些介面跟普通指標的功能類似,比如自增或自減...
STL原始碼簡述
stl是standard template library的簡稱,中文名標準模板庫,惠普實驗室開發的一系列軟體的統稱。從根本上說,stl是一些 容器 的集合,這些 容器 有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的 容器 和演算法的集合指的是世界上很多聰明...