Stack堆栈是频繁使用FILO数据结构,FILO指first in last out,最后出来。

因为只有一个堆叠端口,这也是在口腔进入口。

可以在堆栈中只能操作,你不能访问其它元件的堆叠。器。

Stack的实现是依赖其它容器的。用deque做底层数据结构。这种实现。在STL中往往不称做container容器,往往被归类为container adapter容器适配器。deque是双向开口的数据结构,功能远强大于栈,仅仅需简单分装就可以做成栈。

用其它容器做底层数据结构也但是实现栈,vector、list也支持empty、size、back、push_back、pop_back操作。我想用deque是一种折中吧!假设用vector在又一次分配空间时须要拷贝原来空间的元素。释放原来空间。假设使用list的话。每一次push_back、pop_back都涉及空间的分配和释放。

G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_stack.h 完整列表
/*
*
* Copyright (c) 1994
* Hewlett-Packard Company
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Hewlett-Packard Company makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*
* Copyright (c) 1996,1997
* Silicon Graphics Computer Systems, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Silicon Graphics makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/ /* NOTE: This is an internal header file, included by other STL headers.
* You should not attempt to use it directly.
*/ #ifndef __SGI_STL_INTERNAL_STACK_H
#define __SGI_STL_INTERNAL_STACK_H __STL_BEGIN_NAMESPACE #ifndef __STL_LIMITED_DEFAULT_TEMPLATES
template <class T, class Sequence = deque<T> >
#else
template <class T, class Sequence>
#endif
class stack {
//友元函数,后面会展开的
friend bool operator== __STL_NULL_TMPL_ARGS (const stack&, const stack&);
friend bool operator< __STL_NULL_TMPL_ARGS (const stack&, const stack&);
public:
typedef typename Sequence::value_type value_type;
typedef typename Sequence::size_type size_type;
typedef typename Sequence::reference reference;
typedef typename Sequence::const_reference const_reference;
protected:
Sequence c; // 底层容器deque
public:
// 下面全然利用 Sequence c 的操作,完毕 stack 的操作。
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference top() { return c.back(); }
const_reference top() const { return c.back(); } void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_back(); }
}; template <class T, class Sequence>
bool operator==(const stack<T, Sequence>& x, const stack<T, Sequence>& y) {
return x.c == y.c;
} template <class T, class Sequence>
bool operator<(const stack<T, Sequence>& x, const stack<T, Sequence>& y) {
return x.c < y.c;
} __STL_END_NAMESPACE #endif /* __SGI_STL_INTERNAL_STACK_H */ // Local Variables:
// mode:C++
// End:

版权声明:本文博客原创文章。博客,未经同意,不得转载。

05-15 15:20