正文

总结:函数模版(template)的使用2006-06-11 23:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bclz/15741.html

分享到:

1、c++是强类型语言,不容易实现“为每个函数实例都显式定义一个函数”2、宏定义和模扳提供了这种方法3、宏定义的方法    #define min(a,b)   ((a)<(b)?(a):(b))    这种方法对于简单的min()调用可以正常工作    但是,复杂调用时行为不可预期!!因为它的机制并不像函数调用那样工作,而只是简单地提供参数的替换    结果是,它的参数都被替换两次:一次在参数的测试中,另一次在宏的返回值被计算期间。4、函数模版提供了一种用来自动生成各种类型函数实例的方法。   程序员对于函数接口中的全部或者部分类型进行参数化(parameterize),而函数保持不变。5、例1:求两个数中较小者template <class Type>    Type minm(Type a,Type b)    {         return a<b?a:b;    }    int main(){    minm(10;20);    minm(10.0,20,0);    return 0;}6、例2    STL库中堆栈的用法   <stack>///////6.1  简单的push(),pop()实现<deque>   <stack>#include <iostream>#include <stack>using namespace std;typedef stack<int> ints;//函数模版的实例化typedef deque<char>  chars;int main(){/*    int a[10];    ints p;    for(int i=0;i<10;i++)        p.push(i);    for(i=0;i<10;i++)    {        cout<<p.top()<<endl;        p.pop();    }*/    chars c;     char a[10]={'a','b','c','d','e','f','g','h','i','j'};    for(int i=0;i<10;i++)        c.push_back(a[i]);    for(i=0;i<10;i++)    {        cout<<c.front()<<endl;        c.pop_front();    }    system("PAUSE");    return 0;}/////6.2   汉诺塔的非递归实现#include <iostream>#include <stack>using namespace std;#define print_oprt(op) cout<<"move disk "<<(op).begin<<" from \'"<<(op).src<<"\'to\'"<<(op).dst<<"\'"<<endl;class oprt;typedef stack<oprt> oprt_stack; //define the operationclass oprt{public:    oprt(){};    ~oprt(){};    int begin,end;    char src,dst,bri;    prt(){};    oprt(int rbegin,int rend,char rsrc,char rdst,char rbri):    begin(rbegin),end(rend),src(rsrc),dst(rdst),bri(rbri){}};int hanoi_s(int size,char src,char dst,char bri){    oprt_stack ostack;    oprt tmp;    ostack.push(oprt(1,size,src,dst,bri));    while (!ostack.empty())    {        tmp = ostack.top();        ostack.pop();        if (tmp.begin != tmp.end)        {            ostack.push(oprt(tmp.begin,tmp.end-1,tmp.bri,tmp.dst,tmp.src));            ostack.push(oprt(tmp.end,tmp.end,tmp.src,tmp.dst,tmp.bri));            ostack.push(oprt(tmp.begin,tmp.end-1,tmp.src,tmp.bri,tmp.dst));        }        else            print_oprt(tmp);    }    return 0;}void main(){    hanoi_s(3,'x','y','z');}6、结论,1.如果一个函数的实现在一组实例上保持不变,并且每个实例都处理一种唯一的数据类型,则该函数就是模版的最佳候选者     2.学会了调用用模板定义的函数

阅读(9424) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册