`
ah_fu
  • 浏览: 227988 次
  • 性别: 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++动态数组模板实现

    模板分为函数模板和类模板,这里我们将关注类模板,尤其是用它来实现动态数组。 1. **动态数组的概念**:动态数组是在内存堆上分配的一块连续空间,其大小可以在程序运行期间改变。通常,我们使用`new`运算符来申请...

    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++模板类的实现》是一本深入探讨如何使用C++语言来构建高效数据结构的书籍。在C++中,模板类是一种强大的工具,它允许我们编写通用的代码,适用于不同类型的对象,这在处理数据结构时特别有用。通过...

    CNewArr C++写的动态数组类

    总之,CNewArr类是C++编程中动态数组的一种封装,它利用了C++的模板和动态内存管理特性,提供了对不同类型数据的动态数组操作。通过理解和使用这样的自定义类,程序员可以更加灵活地处理数组,提高代码的可读性和可...

    C++栈类模板

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

    动态数组末班类源代码

    在C++编程中,动态数组是一种能够根据...总之,这个动态数组末班车类源代码提供了一个学习和实践C++动态数组、模板和异常处理的好机会。通过分析和使用这些文件,开发者可以加深对C++核心概念的理解,并提高编程技能。

    C++数组的模版实现代码

    这里我们将深入探讨如何使用C++模板来实现一个双下标重载的Matrix类,这是一个常见的数学概念,通常用于表示二维矩阵。 首先,我们需要理解C++中的模板声明。模板声明的基本形式是`template &lt;typename T&gt;`,这里的`...

    CArray模板类的应用举例

    CArray模板类是MFC(Microsoft Foundation Classes)库中提供的一种动态数组容器,它为C++程序员提供了方便的数据存储和管理功能。CArray类是基于STL(Standard Template Library)中vector理念设计的,但更加适合...

    数组特化模板类

    ### 数组特化模板类详解 #### 一、引言 在C++编程语言中,模板是一种非常强大的特性,它允许我们编写通用的代码来处理不同类型的数据。然而,在某些情况下,我们可能希望针对特定的数据类型或者数据结构进行优化。...

    一组新的多维数组模板类

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

    清华大学C++进阶讲义:第9章 模板与群体数据.pdf

    在C++编程语言中,函数模板和类模板是两种非常重要的概念,都是基于模板技术的实现。模板技术可以使得程序更加灵活和可重用。本章将详细介绍函数模板和类模板的定义、使用和应用场景。 函数模板 函数模板是一种...

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

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

    C++循环队列模版(数组和链表两种实现方式都有)

    在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建能够处理多种数据类型的代码。对于循环队列,我们可以定义一个模板类,让其能适应不同类型的数据,如int、float、自定义对象等。模板类的定义会...

    用c++的类模板实现通用堆栈结构

    本文将详细介绍如何利用C++中的类模板特性来构建一个通用的堆栈结构,该结构既可以适用于顺序存储(使用数组实现),也可以应用于链式存储(使用指针实现)。通过类模板,我们能够创建灵活的数据结构,从而提高代码...

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

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

    栈类模板C++代码

    接下来,我们来看看如何在实际的应用程序中使用这个栈类模板: ```cpp void main() { Stack&lt;int&gt; intstack; int a[3]; for (int i = 0; i ; i++) { cin &gt;&gt; a[i]; intstack.Push(a[i]); } cout ; for (int ...

    Array数组模板vc

    在C++编程语言中,`Array`数组模板是一种泛型编程技术的应用,它允许程序员创建一个通用的类来处理不同类型的数组。这个“Array数组模板vc”项目可能是为Visual C++(VC)环境设计的一个实例,它利用了C++的模板机制...

    C++开发:栈的生成与应用

    在描述中提到了"类模板",这意味着我们的栈类可以接受任何类型的元素,而不仅仅是特定的数据类型。类模板定义如下: ```cpp template class MyStack { // 类的成员变量和成员函数定义 }; ``` 使用类模板的好处是...

    array_synthesis:基本数组处理算法的综合

    10. **模板与泛型编程**:C++的模板允许编写通用的数组处理函数,可以应用于任何类型的数据,如`template&lt;typename T&gt; void printArray(T* arr, int size) {...}`。 "array_synthesis-master"项目可能包含了以上...

Global site tag (gtag.js) - Google Analytics