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容器的具...