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_TEMPLATEStemplate>#elsetemplate #endifclass 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; // 底层容器dequepublic: // 下面全然利用 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 bool operator==(const stack & x, const stack & y) { return x.c == y.c;}template bool operator<(const stack & x, const stack & y) { return x.c < y.c;}__STL_END_NAMESPACE#endif /* __SGI_STL_INTERNAL_STACK_H */// Local Variables:// mode:C++// End:
版权声明:本文博客原创文章。博客,未经同意,不得转载。