A Beginners guide to Templates
Function Template…
从一个不同类型的数组中查找最小元素,采用函数模板的形式。
template<class ElemType> ElemType calcmin(ElemType elemField[],int iFieldSize) { int iMin = 0; for (int i = 1; i < iFieldSize; i++) { if (elemField[i] < elemField[iMin]) { iMin = i; } } return elemField[iMin]; }
该模板用于对两个不同类型的数组int[]和double[],查询最小值…
void LetsTestTheFunctionTemplate() { int iField[] = {1,2,3,4,5,6}; double dField[] = {2.5,2.31,10.23,15.2}; int iSize1 = sizeof(iField)/sizeof(int); int i =calcmin(iField,iSize1); cout<<"i = "<<i<<endl; int iSize2 = sizeof(dField)/sizeof(double); double d = calcmin(dField,iSize2); cout<<"d = "<<d<<endl; }
Class Template…
定义类模板和定义函数模板基本一样,定义一个普通类型的堆栈模板类操作不同的类型元素的堆栈。
template <typename ElemType, int iSize = 100> class Stack{ public: Stack(); ~Stack(){}; void push(const ElemType& anElement); void pop(ElemType& anElement); bool wasError() const; bool isEmpty() const; private: ElemType elems[iSize]; int iTop; bool bErrorOccd; };
和实现普通的类一样,只是有一些稍微的不同,每次实现函数都需要添加<和>,并且需要模板类的名字不需要参数…
//构造函数 template <class ElemType, int iSize> Stack<ElemType, iSize>::Stack():iTop(0),bErrorOccd(false) { } //push函数实现… template <class ElemType, int iSize> void Stack<ElemType, iSize>::push(const ElemType &anElement) { bErrorOccd = (iTop == iSize); if (!bErrorOccd) { elems[iTop++] = anElement; } } //pop函数实现 template<class ElemType, int iSize> void Stack<ElemType, iSize>::pop(ElemType& anElement) { bErrorOccd = (iTop == 0); if (!bErrorOccd) { anElement = elems[--iTop]; } } //wasError函数实现 template<class ElemType, int iSize> bool Stack<ElemType,iSize>::wasError()const { return bErrorOccd; } //isEmpty函数实现 template<class ElemType, int iSize> bool Stack<ElemType, iSize>::isEmpty() const { return (iTop == 0); } //The Test code in main… int _tmain(int argc, _TCHAR* argv[]) { LetsTestTheFunctionTemplate(); Stack<int> iTheIntStack; for (int i = 0; i < 10; i++) { iTheIntStack.push(i); } while(!iTheIntStack.isEmpty()) { int data; iTheIntStack.pop(data); cout<<data<<" "; } cout<<endl; Stack<double,30>dTheDoubleStack; double d = 0.1; for (int i=0; i < 30; i++) { dTheDoubleStack.push((double)i+d); } while (!dTheDoubleStack.isEmpty()) { double data; dTheDoubleStack.pop(data); cout<<data<<" "; } cout<<endl; system("pause"); return 0; }
作者:imFolish
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。