您的位置:首页 > 编程语言 > C语言/C++

C++ 学习练手 - 数组型栈的模板实现

2007-11-01 17:07 761 查看

#ifndef __STACKPRACTICE_H__


#define __STACKPRACTICE_H__ 1


namespace FengChen




...{


template <class Type> class Stack;





template <class T>


std::ostream& operator<<(std::ostream& os, const Stack<T>& S)




...{


os<<"Stack:< ";


for(int i = 0; i < S.m_Length; i++) os<<S.m_Array[i]<<" ";


os<<" --Top>";




return os;


}






template <class Type> class Stack




...{


friend std::ostream& operator<< <Type> (std::ostream&, const Stack<Type>&);


public:


Stack():m_Capicity(64 * 1024 / sizeof(Type)),m_Length(0),m_Array(0)




...{


if( (m_Array = new Type[m_Capicity]) == 0)


throw std::runtime_error("Initialize failed, not enough memory!");


}




Stack(int Size):m_Length(0),m_Array(0)




...{


assert(Size > 1);


m_Capicity = Size;





if( (m_Array = new Type[m_Capicity]) == 0)


throw std::runtime_error("Initialize failed, not enough memory!");


}




~Stack()




...{


delete[] m_Array;


m_Array = 0;


}






inline int Length() const...{return m_Length;}






inline int Capacity() const...{return m_Capicity;}




const Type& Top() const ...{ return m_Array[m_Length - 1]; }


void Push(const Type& value)




...{


if(m_Length + 1 > m_Capicity) this->Resize();


m_Array[m_Length++] = value;


}




const Type& Pop()




...{


if(m_Length < 1) throw std::runtime_error("Stack is null!");


return m_Array[m_Length--];


}


private:


int m_Capicity;


int m_Length;


Type* m_Array;




void Resize()




...{


int newSize = 2*m_Capicity;


int* newArray = 0;




if((newArray = new Type[newSize] ) == 0)


throw std::runtime_error("Resize failed, not enough memory!");


memmove_s(newArray, m_Capicity*sizeof(Type), m_Array, m_Capicity*sizeof(Type));




delete [] m_Array;


m_Capicity = newSize;


m_Array = newArray;


}


};


}




#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: