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:

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

最新文章

  1. HDU 3957 Street Fighter(搜索、DLX、重复覆盖+精确覆盖)
  2. Lambda表达式的语法格式
  3. CentOS 7 安装桌面环境
  4. 使用DNSAgent拦截特定域名
  5. poj2228
  6. 新版本的strcpy_s
  7. Linux用户与用户组,UID及GID
  8. ASP.NET页面跳转
  9. PMP和PRINCE2的价值各是什么?PRINCE2的含金量如何?PMP和prince2有什么区别?
  10. 【CPP】数据和C
  11. Java KeyTool command
  12. &quot;大概能给你的磕盐增加一点幸福感✈&quot;-[那些年的矫情]
  13. SAM求多个串的最长公共子串
  14. JavaScript(类型转换、条件语句、循环、函数)
  15. [转]QDir类及其用法总结
  16. Android入门笔记
  17. composer 安装新包失败的原因之一
  18. (一)RESTful 介绍
  19. vim的全局替换[zz]&amp;把字符替换成回车
  20. UAC 注册表 WIN64 OS 运行时主题

热门文章

  1. Spring Cloud项目
  2. php 微信支付企业付款
  3. C# datatable增加行(datarow)数据为另一个datatable中某行
  4. iframe父页面与子页面的交互
  5. net的微服务架构
  6. PHP移动互联网开发笔记(1)——环境搭建及配置
  7. 利用performSelectorInBackground和performSelectorOnMainThread实现多线程
  8. 通过rinetd实现port转发来訪问内网的服务
  9. KeePass v1.30
  10. 再续FPGA初心,京微齐力脱胎京微雅格重新起航(700万元天使轮,泰有基金领投,水木基金、臻云创投、泰科源跟投。数千万元Pre-A轮融资,领投方为海康基金)