小明是一个很牛逼的程序员,在国际标准化组织工作。

他现在正在设计新一代的C++标准,标准中有一个待实现的函数:findMax(),这个函数要求使用者输入任何类型的数据,他都能找到最大的一个。

于是他想到了这个:

int findMax(int a,int b){
    if(a>b){
        return a;
    }
    else{
        return b;
    }
}
char findMax(char a,char b){
    if(a>b){
        return a;
    }
    else{
        return b;
    }
}

这种写法成功的解决了问题,可小明还是不满意:

1.有太多冗余的代码,写出来的头文件又大又low,全世界的开发者都要骂娘

2.又太多的数据结构需要兼容,还有世界各地的开发者整出来的奇形怪状的数据结构,不能满足标准库的要求

它更换了一种写法:

template <class T>
T findMax(T a,T b){
    if(a>b){
        return a;
    }
    else{
        return b;
    }
}

看起来好奇怪!它能运行吗?

让我们测试一下:

int main(){
    cout<<,)<<endl;
    cout<<"findMax('A','a'):"<<findMax('A','a')<<endl;
}

运行的十分正常,这段函数成功了!此时传入函数的参数,只要能够用“>”运算符来比较,就能够运行。比如int类型,函数会返回大的值,char类型,函数会返回ASCII码靠后的值。这称为泛型编程(Generic Programming),用人话来说就是用相同的方法处理不同的结构,而支撑这个思想的语法就成为模板(template)。整个STL标准模板库就是使用template来实现的,他把教科书上的各种数据结构,比如链表啦,队列啦,栈啦,都封装到一起,供我们调(tou)用(lan),再配合它的algorithm算法库,连排序,二分查找都不用自己写啦!

最新文章

  1. BINARY SEARCH in read table statement
  2. poj1840 哈希
  3. 关于apache的重启
  4. 从头学起android&amp;lt;AudioManager 声音编辑器.五十.&amp;gt;
  5. 【.NET-EF】Entity Framework学习笔记1 - VS2013没有EF的解决方法
  6. 【Android Developers Training】 63. 定义形状
  7. 13.什么是javabean,以及使用原则
  8. C#:委托(delegate)和事件(event) (转)
  9. .Net Core 在Linux服务器下部署程序--(4). 前端ReactWeb应用部署
  10. react 监听页面滚动
  11. Jenkins-在windows上安装及其部署
  12. js中用户名的正则(字符,数字,下划线,减号)
  13. Python+Selenium学习--设置等待时间
  14. dig命令安装
  15. 棋盘问题---poj1321(dfs)
  16. test11
  17. Fortinet Security Fabric
  18. failed to open stream: No such file or directory 报错解决方法
  19. sql查询 同一个字段下另一个字段个数
  20. docker 启动 nginx 访问不了的问题

热门文章

  1. 爬虫那点事,干就玩了之seleunim
  2. Solidity 编程实例--简单的公开拍卖
  3. 网络游戏开发-客户端1(开始Hello world)
  4. 了解ajax基本爬取方式
  5. go 学习笔记之解读什么是defer延迟函数
  6. MySQL学习(四)深入理解乐观锁与悲观锁
  7. python selenium之CSS定位
  8. Jackson中@JsonProperty等常用注解
  9. 《疯狂java-突破程序员基本功的16课 》笔记总结
  10. opencv::opencv_createsamples.exe