C++之模板(template)

本文详细介绍了C++中的模板函数和类的概念,通过实例展示了如何使用模板简化代码,实现数据类型的参数化,提高代码重用率。重点讨论了模板的参数化过程,包括数据参数化和类型参数化,并解释了模板函数与普通函数的区别。
部署运行你感兴趣的模型镜像
  模板(template)是C++最为强大的 功能之一,它使得算法的实现无关于数据的类型,使模板能适用于任意一组相关的函数和类。模板的意义是实现数据类型的参数化,提高了代码的重用率。

eg:计算两个数的最大值。

#include<iostream>
using namespace std;
int myMax(int a,int b){
   return a>b?a:b;
}
char myMax(char a,char b){
   return a>b?a:b;
}
double myMax(double a,double b){
   return a>b?a:b;
}
int main(){
    cout<<myMax(5,6)<<endl;
    cout<<myMax('X','h')<<endl;
    cout<<myMax(5.5,6.7)<<endl;
    return 0;
}

输出结果:
这里写图片描述

 你会发现上面像老太太的缠脚布,真是又臭又长。下面我用模板去简化下上面的代码。

#include<iostream>
using namespace std;
template<typename T>
T myMax(T a,T b){
   return a>b?a:b;
}
int main(){
    cout<<myMax(5,6)<<endl;
    cout<<myMax('X','h')<<endl;
    cout<<myMax(5.5,6.7)<<endl;
    return 0;
}

输出结果:
这里写图片描述

  综上你会发现使用模板两个优点:
   1.减少重复代码 
   2.处理目前未知数据 

  实现模板的重要手段就是“数据类型参数化”。分为两个层次:数据的参数化;类型的参数化。所谓参数化就是将具体的数据或数据类型的形式化表示。
  其中template是模板的标识,尖括号部分<class T>是对数据类型形式参数T的说明,关键字class表明它是一个模板形式参数。

  模板分为类模板和函数模板,对于函数模板的定义的语法规则如下:
  (1)所有模板都必须以关键字template开始,关键字template告诉编译器下面的程序代码将会操作多种数据类型。
  (2)以尖括号<>括起来的部分为模板形参列表,在该类表中声明了一个或多个模板形参,若多个模板形参,它们之间用逗号隔开,并且所有的形参前面必须加关键字class或者typename。
  eg:
         template<typename T,typename Q>
         void do_anything(T t,Q q);
  (3)除了模板语法外,普通函数和模板函数的唯一区别就是有表示类型参数的T表示函数形参的类型。

  对于类和结构体也可以带模板。
  eg:
        template<typename T>
        class Poin{
             T x,y;
             point(T x=0,T y=0):x(x),y(y){}//表示把成员变量x,y初始化为参数x,y 
        };      

  结构体和类差异很小,主要区别在默认访问对象和继承方式不同。在工程中一般用struct定义纯数字,包含较少的成员函数;class定义复杂的行为。

  本文只是为了解模板函数和模板类,为能更好的理解(标准模板库)STL做铺垫。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值