`
ah_fu
  • 浏览: 222884 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

c++template学习:基于数组的固定大小的模版类栈

阅读更多
头文件:include/Stack.h
#ifndef _STACK_H_
#define _STACK_H_

#include 
<assert.h>

namespace DataStructure
...{

template
<typename DataType>
class Stack
...{
public:
    Stack(
int StackSize);
    
~Stack();
    
bool Pop(DataType* Out);
    
bool Push(DataType& In);
    
bool IsEmpty();
    
bool IsFull();
    
bool GetTop(DataType* Out);
    
int Count();
private:
    Stack();
    Stack(
const Stack& rsh);
    Stack
& operator=(Stack& rsh);
//-----------------------------------------------------------------------------
protected:

private:
    
const int STACK_SIZE;
    
int m_Top;
    DataType
* m_Data;
}
;

#include 
"../src/Stack.hpp"

}
  //end namespace

#endif


文件:src/Stack.hpp

template
<typename DataType>
Stack
<DataType>::Stack(int StackSize):
    STACK_SIZE(StackSize),
    m_Top(
0)
...{
    assert(StackSize
>0);
    m_Data 
= new DataType[StackSize];
}


template
<typename DataType>
Stack
<DataType>::~Stack()
...{
    delete[] m_Data;
    m_Data 
= NULL;
}


template
<typename DataType>
bool Stack<DataType>::Pop(DataType* Out)
...{
    
if (0==m_Top)
    
...{
        
return false;
    }

    m_Top
--;
    
*Out = m_Data[m_Top];
    
return true;
}


template
<typename DataType>
bool Stack<DataType>::Push(DataType& In)
...{
    
if (m_Top>=STACK_SIZE-1)
    
...{
        
return false;
    }

    m_Data[m_Top] 
= In;
    m_Top
++;
    
return true;
}


template
<typename DataType>
bool Stack<DataType>::IsEmpty()
...{
    
return 0==m_Top;
}


template
<typename DataType>
bool Stack<DataType>::IsFull()
...{
    
return m_Top==STACK_SIZE-1;
}


template
<typename DataType>
bool Stack<DataType>::GetTop(DataType* Out)
...{
    
if (0==m_Top)
    
...{
        
return false;
    }

    
*Out = m_Data[m_Top];
    
return true;
}


template
<typename DataType>
int Stack<DataType>::Count()
...{
    
return m_Top-1;
}



调用例子:

#include 
"include/Stack.h"

using namespace DataStructure;

void Test()
...{
    Stack
<int> s(100);
    
int temp = 1;
    
if (!s.Push(temp))
    
...{
        printf(
"栈满!");
        
return;
    }

    
if (!s.Pop(&temp))
    
...{
        printf(
"栈空! ");
        
return;
    }

}

分享到:
评论

相关推荐

    C++动态数组类模板

    动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array&lt;T&gt; &A); ~Array(void); Array&lt;T&gt;& operator = (const Array&lt;T&gt; &rhs;); //重载=,使数组...

    C++栈类模板

    C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...

    一组新的多维数组模板类

    一组新的多维数组模板类 by chen3feng(RoachCock@smth) email: chen3feng@163.com, chen3fengx@163.com, chen3fengx@hotmail.com [引言] 在C/C++开发中,多维数组是一个让很多人感到棘手的问题.原因...

    C++ 自定义动态数组模板

    #include "stdafx.h"  #include  using namespace std;  template  class MyArray

    judy-template:Judy 数组的实现,包装在一个 c++ 模板中。 使用 Karl Malbrain 的实现,http

    Judy 阵列模板Judy 数组是一个稀疏动态数组。 它是一种特殊的特里树,在空间和时间上都非常高效,并且不需要调整。 这使用了Judy Array 实现。 可以通过 Doug Baskins 在 sourceforge 或上的找到更多信息。模板...

    C++数组模板封装

    C++数组模板封装,主要成员包括: public: Array(); Array(int size); Array(int size, T value); Array(Array&lt;T&gt; & other); Array(T * arr, int size); Array(int size, T* arr, int arrSize); ...

    C/C++中获取数组长度的方法示例

    学过C/C++的人都知道,在C/C++中并没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取其长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / ...

    C++语言实现线性表之数组实例

    本文实例讲述了C++语言实现线性表之数组。分享给大家供大家参考。具体分析如下: 感觉用C++中的构造函数、析构函数等类的特点来描述一些数据结构更加易读,更加合理,便捷。但有一个问题,编译器不支持模板的分离...

    C++ 模板写的短小字符串类,用于替换字符数组和std::string

    //短小字符串类 template struct TinyString { TinyString(); template&lt;size_t K&gt; TinyString(const TinyString&lt;K&gt;& str); TinyString(size_t n, char c); TinyString(const char* s, size_t n=0...

    编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为:

    编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为: template &lt;class Type&gt; void maxMin (Type *A,...

    C++的STL标准模板库思维导图

    C++ 的标准模板库(Standard Template Library,STL)是泛型程序设计最成功应用的实例。 STL 是一些常用数据结构(如链表、可变长数组、排序二叉树)和算法(如排序、查找)的模板的结合,主要由 Alex Stepanov ...

    定长字符串模板类

    如果C++标准支持模板typedef的话,下面的4的俩类就不用再写了,遗憾的是还不支持,所以他也是抽象类.//其实做成可实例化的类也没任何问题。 3. typedef basic_small_string_base&lt;;char, std::char_traits&lt;;...

    标准模板库STL(Standard Template Library)指南

    年,模板(Template)在C++中还未实现,所以他的工作推迟了。1988 年,Stepanov 到HP 实 验室工作,并在1992 年被任命为一个算法项目的经理。在此项目中,Alexander Stepanov 和 Meng Lee 写了一个巨大的库---标准模板...

    C++ STL 参考手册Cpp_STL_ReferenceManual.pdf

    C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环...

    C语言利用模板实现简单的栈类

    本文实例为大家分享了C语言利用模板实现简单的栈类(数组和单链表),供大家参考,具体内容如下 主要的功能是实现一个后进先出的列表,有入栈、出栈、返回大小、判空等基本功能 #pragma once using namespace std;...

    偏微分方程利用c++表达式模板与共轭梯度法实现

    Template.h 是各种表达式模板的集合,包含必要的向量加减乘法操作符重载。 Matrix.h 是AX=b中,关键A数组生成的类,这里我用了数组压缩技术,即把带状数组A压缩,使程序执行更有效率。 cgexpr.cpp是Main函数,包括...

    C++标准的STL介绍

    STLStandard Template Library,即标准模板库,是一个具有工业强度的,高效的C++ 程序库。它被容纳于C++ 标准程序库C++ Standard Library中,是ANSI/ISO C++ 标准中最新的也是极具革命性的一部分。该库包含了诸多在...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    CruiseYoung提供的带有详细书签... 8.6.3 使用有多个形参的类模板 405 8.6.4 函数对象模板 406 8.7 使用类 407 8.7.1 类接口的概念 407 8.7.2 定义问题 407 8.7.3 实现CBox类 408 8.8 组织程序代码 425 8.9 字符...

    欧拉公式求圆周率的matlab代码-CP-Template:竞争性编程的C++模板

    欧拉公式求长期率的matlab代码CP模板 竞争性编程的C ++模板 主文件是Data Structures.cpp 也可以看看: 事物清单(按顺序): 段/分域树 段树(所有范围都是封闭的,即包括l,r) 点更新 范围更新(延迟传播) 简短...

    C++中的vector容器对象学习笔记

    C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector! vector 是同一种类型的对象的集合 ,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。 ...

Global site tag (gtag.js) - Google Analytics