函数模板

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. template <typename T>
  7. inline T const& Max (T const& a, T const& b)
  8. {
  9. return a < b ? b:a;
  10. }
  11. int main ()
  12. {
  13.  
  14. int i = 39;
  15. int j = 20;
  16. cout << "Max(i, j): " << Max(i, j) << endl;
  17.  
  18. double f1 = 13.5;
  19. double f2 = 20.7;
  20. cout << "Max(f1, f2): " << Max(f1, f2) << endl;
  21.  
  22. string s1 = "Hello";
  23. string s2 = "World";
  24. cout << "Max(s1, s2): " << Max(s1, s2) << endl;
  25.  
  26. return 0;
  27. }

类模板

  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdlib>
  4. #include <string>
  5. #include <stdexcept>
  6.  
  7. using namespace std;
  8.  
  9. template <class T>
  10. class Stack {
  11. private:
  12. vector<T> elems; // 元素
  13.  
  14. public:
  15. void push(T const&); // 入栈
  16. void pop(); // 出栈
  17. T top() const; // 返回栈顶元素
  18. bool empty() const{ // 如果为空则返回真。
  19. return elems.empty();
  20. }
  21. };
  22.  
  23. template <class T>
  24. void Stack<T>::push (T const& elem)
  25. {
  26. // 追加传入元素的副本
  27. elems.push_back(elem);
  28. }
  29.  
  30. template <class T>
  31. void Stack<T>::pop ()
  32. {
  33. if (elems.empty()) {
  34. throw out_of_range("Stack<>::pop(): empty stack");
  35. }
  36. // 删除最后一个元素
  37. elems.pop_back();
  38. }
  39.  
  40. template <class T>
  41. T Stack<T>::top () const
  42. {
  43. if (elems.empty()) {
  44. throw out_of_range("Stack<>::top(): empty stack");
  45. }
  46. // 返回最后一个元素的副本
  47. return elems.back();
  48. }
  49.  
  50. int main()
  51. {
  52. try {
  53. Stack<int> intStack; // int 类型的栈
  54. Stack<string> stringStack; // string 类型的栈
  55.  
  56. // 操作 int 类型的栈
  57. intStack.push(7);
  58. cout << intStack.top() <<endl;
  59.  
  60. // 操作 string 类型的栈
  61. stringStack.push("hello");
  62. cout << stringStack.top() << std::endl;
  63. stringStack.pop();
  64. stringStack.pop();
  65. }
  66. catch (exception const& ex) {
  67. cerr << "Exception: " << ex.what() <<endl;
  68. return -1;
  69. }
  70. }

C++ 函数模板&类模板的更多相关文章

  1. 3.2 STL中的函数对象类模板

    *: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...

  2. C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化

    模板类模板成员函数(member function template)隐式处理(implicit)变化 本文地址: http://blog.csdn.net/caroline_wendy/articl ...

  3. C++函数模板&类模板

    函数模板 模板概念及语法 主要目的,简化代码,减少重复代码.基本语法格式:  template<class T> 或者 template<typename T> //末尾不加分 ...

  4. C++ 函数模板&类模板详解

    在 C++ 中,模板分为函数模板和类模板两种.函数模板是用于生成函数的,类模板则是用于生成类的. 函数模板&模板函数     类模板&模板类  必须区分概念 函数模板是模板,模板函数时 ...

  5. C++ 函数模板/类模板

    #include <iostream> #include <vector> using namespace std; template < class T > // ...

  6. 函数模板&类模板

    #include <iostream> #if 0//函数模板 template<typename T> T max(T a, T b, T c)//函数模板 { if (a ...

  7. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

  8. 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)

    demo 1 #include <iostream> #include <cstdio> using namespace std; //template <typenam ...

  9. C++复习:函数模板和类模板

    前言 C++提供了函数模板(function template).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数模板.凡是函数体 ...

  10. C++模板编程中只特化模板类的一个成员函数

    模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...

随机推荐

  1. ajax请求完之前的loading加载

    很多时候我们需要引入框架来开发项目,这时我们可能会遇到页面还没加载完源码出来了的问题,给用户一种不好的视觉体验,这是便需要loading加载了,来完善用户体验! /*loading.js*/ // 加 ...

  2. python之递归与二分法

    1. 递归 自己调用自己 递归的入口(参数) 和 出口(return) 树形结构的遍历 import os def func(lujing, n): lst = os.listdir(lujing) ...

  3. AWT初步—Frame和 Panel

    初识 AWT       GUI 和 AWT GUI:Graphics User Interface  图形用户界面 AWT:Abstract Window Toolkit  抽象窗口工具集 之前的程 ...

  4. ArcGIS Arcade

    ArcGIS Arcade http://127.0.0.1/Resource/JavaScript/arcgis_js_api/sdk/4.10/latest/guide/arcade/index. ...

  5. 测试思想-流程规范 SVN代码管理与版本控制

    SVN代码管理与版本控制 by:授客 QQ:1033553122   欢迎加入软件性能测试交流群(QQ群):7156436   目录 一. 二. 三. 四. 五. 六. 七. 一. 创建根目录 创建一 ...

  6. 将 Azure VM 迁移到 Azure 中的托管磁盘

    Azure 托管磁盘无需单独管理存储帐户,从而简化了存储管理. 还可以将现有的 Azure VM 迁移到托管磁盘,以便受益于可用性集中 VM 的更佳可靠性. 它可确保可用性集中不同 VM 的磁盘完全相 ...

  7. Sql_server基本操作

    使用Sql_server创建表,视图,触发器,存储过程,函数等基本操作. create table test1( /* 创建一个表 */ num int ) alter table test1 /* ...

  8. Asp.net Mvc身份验证

    1.安装组件 Microsoft.AspNet.Identity.Core,身份认证核心组件 安装Microsoft.AspNet.Identity.EntityFramework,EF实现身份认证 ...

  9. windows 实用技巧

    以下内容版权归原作者所有!!!如果侵权,立即删除. 1.系统激活:https://mp.weixin.qq.com/s/Kl_iEeSSxSprblfSRZ6yEQ 2.百度云下载:https://w ...

  10. Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)

    一.概念 代理是什么呢?举个例子,一个公司是卖摄像头的,但公司不直接跟用户打交道,而是通过代理商跟用户打交道.如果:公司接口中有一个卖产品的方法,那么公司需要实现这个方法,而代理商也必须实现这个方法. ...