STL 07 queue stack原始碼剖析

2021-10-14 15:21:11 字數 2507 閱讀 2999

先進先出

先進後出

從上面原始碼可以看出實際上它們兩者的底層就是使用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也是演算法和其他一些元件的集合。這裡的 容器 和演算法的集合指的是世界上很多聰明...