STL原始碼剖析 stack

2021-07-13 12:56:27 字數 1755 閱讀 1387

stack

是一種「先進後出」的資料結構,它只能在棧頂對資料進行操作,即只能在棧頂進行新增元素、移除元素、取得最頂端元素。不能進行遍歷行為,所以不需要設計自己的迭代器。在

sgi stl

的原始碼的設計中,它是基於某種容器作為底部結構的,預設容器是

deque

容器,使用者也可以自己指定容器的型別。

由於原始碼比較短,同時是基於其他容器進行操作的,這裡只給出原始碼的剖析:

stl_stack.h

// filename: stl_stack.h

#ifndef __sgi_stl_internal_stack_h

#define __sgi_stl_internal_stack_h

__stl_begin_namespace

// 如果編譯器不能根據前面模板引數推導出後面使用的預設引數型別,

// 那麼就需要手工指定, 本實作stack內部容器預設使用deque

// 選用deque可以在儲存空間不足時可以動態增加, 而且代價很低

#ifndef __stl_limited_default_templates

template >

#else

template #endif

class stack

// stack中元素個數

size_type size() const

// 返回棧頂元素, 注意這裡返回的是引用!!!

reference top()

const_reference top() const

// 在棧頂追加新元素

void push(const value_type& x)

// 移除棧頂元素, 注意不返回元素的引用,

// 很多初學者隨機用此容器時經常誤認為pop()操作同時會返回棧頂元素的引用

void pop()

};// 判斷兩個stack是否相等, 就要測試其內部維護容器是否相等

// x.c == y.c會呼叫容器過載的operator ==

template bool operator==(const stack& x, const stack& y)

template bool operator

__stl_end_namespace

#endif /* __sgi_stl_internal_stack_h */

// local variables:

// mode:c++

// end:

例項:

// constructing stacks

#include // std::cout

#include // std::stack

#include // std::vector

#include // std::deque

int main ()

output:

size of first: 0

size of second: 3

size of third: 0

size of fourth: 2

the element at the top of stack second is:2 .

size of second: 4

STL原始碼剖析 stack

stack是一種先進後出的資料結構,只有乙個出口 末端 stack允許增加元素 移除元素和取得最末端 最頂端 元素,但這些操作都只能在末端進行,除了末端,stack沒有辦法訪問其他位置的元素,沒有遍歷功能。把相應的已有的容器作為底部結構,將其介面改變,使之符合stack的特性,就形成乙個stack。...

STL原始碼剖析學習七 stack和queue

stl原始碼剖析學習七 stack和queue stack是一種先進後出的資料結構,只有乙個出口。允許新增 刪除 獲取最頂端的元素,沒有任何辦法可以訪問其他元素,不允許有遍歷行為。預設情況下用deque作為stack的底部結構,將其介面改變,封住一端就可以形成stack 介面 empty size ...

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...