今天,看C++Template的时候看到那人写了一个Stack,于是乎,手痒,自己也写了一个,在拜读了STD文件和C++模板元编程某些小节之后,你们就看到了这篇代码。

经过上述一番经历之后,我重新写了myVector,使之更完善,更加服务于顶层结构,如:myStack

myVector实现

栈没什么写的,大部分精力都放在了重新构建底层容器上,STL里面的功能函数基本都实现了,除了std的各种相关的构造函数实在整不来那么多

测试效果:

#include "E:\数据结构\myStack.h"
#include <iostream> using namespace std; int main(int argc, char* argv[])
{
int arr[]{ ,,,,,, };
myVector<int> V{ arr,arr + };
myStack<int> S;
myStack<int>S2{ V }; cout << "test 1" << endl << endl;
cout << "栈1添加一个元素 10" << endl << endl;
S.push();
cout << "栈1添加一个元素 15" << endl << endl;
S.push();
cout << "栈1顶部元素为:";
cout << S.top() << endl << endl;
S.pop();
cout << "弹出栈1顶部元素" << endl << endl;
cout << "栈1顶部元素为:";
cout << S.top() << endl << endl;
S.pop();
cout << "弹出栈1顶部元素" << endl << endl;
cout << "栈1添加元素 10、15" << endl << endl;
S.push();
S.push(); cout << "交换栈1栈2" << endl << endl;
S.swap(S2); cout << "test 2" << endl << endl; cout << "栈1:" << endl;
myStack<int>::container_type container = S._Get_container();
for (auto it : container)
cout << it << " ";
cout << endl << endl; cout << "栈2:" << endl;
myStack<int>::container_type container2 = S2._Get_container();
for (auto it : container2)
cout << it << " ";
cout << endl;
}

Template代码:

#ifndef _MY_STACK
#define _MY_STACK #include <E:\数据结构\myVector.h>
template<class T,
class myContainer = myVector<T> >
class myStack
{
public: //public date-type information used by class design
typedef myStack<T, myContainer> _Mytype;
typedef myContainer container_type;
typedef typename myContainer::value_type value_type;
typedef typename myContainer::size_type size_type;
typedef typename myContainer::_pointer _pointer; #define self (*this) public: //basic functions of class myStack()
{
elems.clear();
} myStack(const _Mytype& rhs)
:elems(rhs.elems)
{ } explicit myStack(const myContainer& _container)
:elems(_container)
{ } _Mytype& operator=(const _Mytype& other)
{
elems = other.elems;
return self;
} public: //some operator-loading functions of stack
bool operator==(const _Mytype& rhs)
{
return elems == rhs.elems;
} bool operator!=(const _Mytype& rhs)
{
return elems != rhs.elems;
} bool operator<(const _Mytype& rhs)
{
return elems < rhs.elems;
} bool operator>(const _Mytype& rhs)
{
return elems > rhs.elems;
} bool operator<=(const _Mytype& rhs)
{
return !(self > rhs);
} bool operator>=(const _Mytype& rhs)
{
return !(self < rhs);
} public: // main options of stack void push(T const& item)
{ //尾部添加元素
elems.push_back(item);
} void pop()
{ //将顶部元素删除
if (elems.empty())
throw "myStack<>::pop(): empty stack\n";
elems.pop_back();
} const T& top()const
{ //取顶部元素
if (elems.empty())
throw "myStack<>::top(): empty stack\n";
return elems.back();
} bool empty()const
{ //判空
return elems.empty();
} void swap(_Mytype& rhs)
{ //交换数据
elems.swap(rhs.elems);
} size_type size()const
{ //get the size of stack
return elems.size();
} const myContainer& _Get_container()const
{ //Get the container of stack
return elems;
} private:
myContainer elems; }; #endif

感谢您的阅读,生活愉快~

<泛> STL - stack 模拟实现的更多相关文章

  1. 洛谷 P1739 表达式括号匹配【STL/stack/模拟】

    题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...

  2. <泛> STL - vector 模拟实现

    今天为大家带来一个模拟STL-vector的模板实现代码. 首先看一下测试结果,之后再为大家呈现设计 测试效果 测试代码 #include<iostream> #include<ve ...

  3. STL stack 容器

    STL stack 容器 Stack简介 stack是堆栈容器,是一种“先进后出”的容器.      stack是简单地装饰deque容器而成为另外的一种容器.      #include <s ...

  4. 浅谈C++ STL stack 容器

    浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...

  5. C++ 标准模板库(STL)-stack

    主要介绍一下C++11版本中标准模板库中栈的用法,希望可以帮到需要用的人. #include <iostream> #include <stack> #include < ...

  6. STL stack 常见用法详解

    <算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...

  7. C++ STL stack和queue

    C++ STL中独立的序列式容器只有vector,list,deque三种,stack和queue其实就是使用容器适配器对deque进行了封装,使用了新接口. 使用标准库的栈和队列时,先包含相关的头文 ...

  8. C++ STL stack 用法

    Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”. 使用STL的s ...

  9. STL——stack

    首先,堆栈是一个线性表,插入和删除只在表的一端进行.这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom).堆栈的元素插入称为入栈,元素的删除称为出栈.由于元素的入栈和出栈总 ...

随机推荐

  1. [hadoop]hadoop2.6完全分布式环境搭建

    在经过几天的环境搭建,终于搭建成功,其中对于hadoop的具体设置倒是没有碰到很多问题,反而在hadoop各节点之间的通信遇到了问题,而且还反复了很多遍,光虚拟机就重新安装了4.5次,但是当明白了问题 ...

  2. Donald Ervin Knuth:最年轻的图灵奖高德纳

    高德纳(Donald Ervin Knuth,1938年),美国著名计算机科学家,斯坦福大学电脑系荣誉教授.高德纳教授被誉为现代计算机科学的鼻祖,在计算机科学及数学领域发表了多部 具广泛影响的论文和著 ...

  3. 修改elasticsearch5,搜索结果最大10000

    一:在Linux服务器中执行如下命令(开启es服务) curl -XPUT http://服务器ip:9200/索引名称/_settings -d '{ "index" : { & ...

  4. Exp2:后门原理与实践

    Exp2:后门原理与实践 1 实践目标 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主机操作Shell, 任务计划启动 (0.5分) 任务三: ...

  5. #error#优化#Model#理解下面这句话错误所导致的错误:"传入一个对象,那么你就拥有了对象的属性"2

    CHENYILONG Blog #error#优化#Model#理解下面这句话错误所导致的错误:"传入一个对象,那么你就拥有了对象的属性"2 © chenyilong. Power ...

  6. ASM配置OGG

    两种方法:http://blog.sina.com.cn/s/blog_aa84cfe40101lsks.html 使用ACFS配置OGG:http://ylw6006.blog.51cto.com/ ...

  7. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化【转】

    转自:http://blog.csdn.net/qinrenzhi/article/details/78334677 相关博客http://blog.chinaunix.net/uid-2495495 ...

  8. aarch64_g3

    glibc-langpack-wal-2.25-6.fc26.aarch64.rpm 2017-06-20 17:08 210K fedora Mirroring Project glibc-lang ...

  9. ntp/系统时钟/硬件时钟/双系统下计算机时间读取的问题

    http://blog.chinaunix.net/uid-182041-id-3464524.html       //linux系统时间和硬件时钟问题(date和hwclock) http://j ...

  10. python 统计MySQL表信息

    一.场景描述 线上有一台MySQL服务器,里面有几十个数据库,每个库有N多表. 现在需要将每个表的信息,统计到excel中,格式如下: 库名 表名 表说明 建表语句 db1 users 用户表 CRE ...