模板之函数模板

一:定义模板

     eg:template <typename T>                       //template 可以用class替换

         inline T const& max (T const& a,T const& b )

         {    return a<b?b:a;   }

二:使用模板

     eg:#include <iostream>
            #include <string>
            #include "max.h"
            using namespace std;
           int main()
        {
int i=42;
cout<<"max(7,i):"<<max1(7,i)<<endl;


double f1=3.4;
double f2=6.7;
cout<<"max(f1,f2):"<<max1(f1,f2)<<endl;

string s1="wang";
string s2="nihao";
cout<<"max(s1,s2):"<<max1(s1,s2)<<endl;

return 0;
}

 如果试图基于一个不支持模板内部所使用操作的类型实例化一个模板,那么将会导致一个编译错误,我们可以得出这样一个结论:模板被编译了两次,分别发生在 一是实例化以前,先检查模板代码本身买查看语法是否正确,在这里会发现错误的语法;二是在实例化期间,检查模板代码,查看是否所有的调用都有效,在这里会发现无效的调用,例如该实例化类型不支持某项函数的调用等(这不同于普通函数中的编译和链接之间的区别,因为对于普通函数而言,只要该函数的声明(即不需要定义),就可以顺利通过编译)。

三:模板实参的演绎

eg:  max(4,7)   //ok

          max(4,4.2)  //error   函数模板参数的实例化中其数据不能进行自动转换

有三种方法可以用于处理上面的这个错误:

 1、对实参进行强制类型转换,是它们可以相互匹配

2、显式指定(或者限定)T的类型:max(static_cast<double>(4),4.2)

(当模板参数和调用参数没有发生关联,或者不能由调用参数来决定模板参数的时候,在调用时就必须显式指定模板参数)

3、指定两个参数可以具有不同的类型

四:重载函数模板

template <typename T>

inline T const& max (T const& a,T const& b,T const& c)

{

     return ::max(::max(a,b),c);

}


int main()

{

::max(7,42,68);

max<>(7,42);  //可以显式的指定一个空的模板参数表,这个语法好像是告诉编译器,只有模板才能匹配这个调用。

::max('a','b');

::max('a',42.7);

return 0;

}

五:小结

        模板函数为不同的模板实参定义了一个函数家族;

       当你传递模板参数的时候,可以根据实参的类型来对函数模板进行实例化。

       你可以显示的指定模板参数。

       你可以重载函数模板

      当重载函数模板的时候,把你改变限制在显式地指定模板参数。

      一定要让函数模板的所有重载版本的声明都位于他们被调用的位置之前。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值