函数模板学习摘录(郭玮网课)函数模板

一、函数模板的定义

函数模板是通用的函数描述,它们使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。
由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时候也被称为通用编程。

二、函数模板的应用(以swap为例)

template<class AnyType>
void swap(AnyType &x,AnyType &y)
{
    Anytype temp;
    temp=x;
    x=y;
    y=temp;
}

ps:在C++11中,可以将class替换为typename
这是一种泛型编程。(类名定义为AnyType也体现了这一点)凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。

三、函数模板的重载问题

函数模板可以重载,只要形参表(如上:AnyType &x,AnyType &y)
或者类型参数表(如上:class AnyType)不同即可

四、函数模板和函数次序

在这里插入图片描述普通函数>模板函数>实参经过类型转换后可匹配的普通函数>报错(都不行编译器也忍不了,就报错了)

五、函数模板map

直接上代码

#include<iostream>
using namespace std;
template<typename T,typename Func>
void Map(T s,T e,T x,Func op)
{
    for(;s!=e;++s,++x)
    {
        *x=op(*s);
    }
}
int Cube(int x) {return x*x*x;}
double Square(double x) {return x*x;}
int a[5]={1,2,3,4,5},b[5];
double d[5]={1.1,2.1,3.1,4.1,5.1},c[5];
int main(){
    Map(a,a+5,b,Square);
    for(int i=0;i<5;i++) cout<<b[i]<<",";
    cout<<endl;
    Map(a,a+5,b,Cube);
    for(int i=0;i<5;i++) cout<<b[i]<<",";
    cout<<endl;
        Map(d,d+5,c,Square);
    for(int i=0;i<5;i++) cout<<fixed<<<<c[i]<<",";
    cout<<endl;
    return 0;
}

关于这块,需要注意的点是了解编译器将模板函数实例化后函数的确定形态,避免出现一些小错误。(错误判断参数表参数类型等)
实例化后如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值