简易模版栈及数制转换

 

#pragma once

const int INIT_SIZE = 100;
const int INCRENT_SIZE = 10;

template <typename T>
class CStack
{
private:
T m_pBase;/基址*/
int m_nSize;
int m_nTop;
public:

CStack()
{
m_pBase = new T[INIT_SIZE];
m_nSize = INIT_SIZE;
m_nTop = 0;
}

~CStack(void)
{
delete [] m_pBase;
}
bool IsEmpty()const
{
return m_nTop == 0;
}
void Push(const T& val)
{
//空间已满
if (m_nTop == m_nSize)
{
//增加
T newBase = new T[m_nSize+INCRENT_SIZE];
//复制原来的数据
::memcpy(newBase,m_pBase,m_nSize
sizeof(T));
//删除原来的空间
delete []m_pBase;
//新的空间地址
m_pBase = newBase;
m_nSize += INCRENT_SIZE;
}
m_pBase[m_nTop++] = val;
}
int Pop(T& val)
{
if (m_nTop)
{
val = m_pBase[–m_nTop];
return 0;
}
return -1;
}
};

下面是个小的测试程序

// StackTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

#include "Stack.h"
void DecToOthers(int decVal,const int x)
{
CStack<int> stack;
while (decVal)
{
stack.Push(decVal%x);
decVal = decVal / x;
}
while(!stack.IsEmpty())
{
int n;
stack.Pop(n);
std::cout<<n;
}
std::cout<<std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
DecToOthers(1348,8);

DecToOthers(128,2);

CStack<int> stack;
for (int i=0;i<200;i++)
{
stack.Push(i);
}
while(!stack.IsEmpty())
{
int n;
stack.Pop(n);
std::cout<<n<<"  ";
}

return 0;
}