stack(仿sgi stl)
2014-08-27 20:29
211 查看
#include <iostream> #include <deque> using namespace std; template <typename T, typename Sequence = deque<T>> class stack // stack内部使用默认容器deque { friend bool operator== <T> (const stack &x, const stack &y); friend bool operator< <T> (const stack &x, const stack &y); public: typedef typename Sequence::size_type size_type; // 一种类型 足以保存当前类型的最大对象的大小 typedef typename Sequence::value_type value_value; // 元素类型 typedef typename Sequence::reference reference; // 元素的引用 typedef typename Sequence::const_reference const_reference; // 元素的常量引用 protected: Sequence c; // 实际维护的容器 public: stack() : c(){} // 默认构造函数 构造一个空栈 stack(const Sequence &s) : c(s){} // 接受一个容器的构造函数 // 下面的操作完全使用内部容器的成员函数实现 bool empty() const // 若a包含任何元素但会false 否则返回true { return c.empty(); } size_type size() const // 返回a中元素的数目 { return c.size(); } reference top() // 返回栈顶元素 但不将元素出栈 { return c.back(); } const_reference top() const // 重载版本 { return c.back(); } void push(const value_value &x) // 压栈 { c.push_back(x); } void pop() // 出栈 { c.pop_back(); } }; template <typename T, typename Sequence> bool operator==(const stack<T, Sequence> &x, const stack<T, Sequence> &y) { return x.c == y.c; } template <typename T, typename Sequence> bool operator<(const stack<T, Sequence> &x, const stack<T, Sequence> &y) { return x.c < y.c; } template <typename T, typename Sequence> bool operator!=(const stack<T, Sequence> &x, const stack<T, Sequence> &y) { return !(x == y); } template <typename T, typename Sequence> bool operator>(const stack<T, Sequence> &x, const stack<T, Sequence> &y) { return x < y; } template <typename T, typename Sequence> bool operator<=(const stack<T, Sequence> &x, const stack<T, Sequence> &y) { return !(y < x); } template <typename T, typename Sequence> bool operator>=(const stack<T, Sequence> &x, const stack<T, Sequence> &y) { return !(y < x) } int main() { stack<int> intstack; for (size_t ix = 0; ix != 10; ++ix) { intstack.push(ix); } while (!intstack.empty()) { int value = intstack.top(); intstack.pop(); cout << value << " "; } }
相关文章推荐
- STL之stack——解决POJ 1028
- STL中的stack(堆栈)
- SGI STL的内存池
- stl_stack.h
- STL FunctionObject实现 - sgi扩展
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
- C++标准库__std::deque(双端队列),std::queue(队列),std::stack(栈)__由stl的定义我们就可以看出 queue和stack都是基于deque实现的和常用接口
- STL之stack&queue容器(笔记)
- C++ STL--stack/queue 的使用方法
- STL容器之stack
- STL中的queue和stack
- SGI-STL学习笔记之allocator .
- STL中的stack的pop函数为什么不返回值?
- C++ STL--stack/queue 的使用方法
- 详解括号匹配问题(STL stack)
- STL容器之stack
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
- SGI STL安装
- 解析SGI STL 函数static void (* __set_malloc_handler(void (*__f)()))()
- STL之 stack的基础应用