c++复习之函数模板

c++与算法学习笔记——Day_01

#include

//1
//C++编程基础之模板的引入和泛型编程的概念

//为什么要有函数模板:假设在编程时,我们需要定义一个函数实现a+b的运算,但当a与b的类型是不确定的时候,就需要定义一个模板函数来实现计算a+b的值

//模板函数的定义:

//template
//template
//以上两种写法都正确
using namespace std;

template //定义一个模板使用该模板定义具体的函数
//模板函数在定义的时候内部的typename可以替换为class,两者在定义时都可以,模板只是提供一个借口,在模板函数调用的时候需要指明具体的参数列表的变量类型
T abc_Add(T x,T y,T z)
{
return x+y+z;
}
// 函数模板在传值时候的问题思考:
//在c语言中,一般地我们会将形参列表具体给出,在调用该函数时,需要传入实际的参数,在函数调用过程中,实际还发生了形参到实参的值拷贝,当参数列表
//形参不多时可以接受,但在形参比较多时,循环拷贝很耗费时间,c++提供一种机制,就是传入常量的引用,引用在c++中实际就是一个const类型的指针,当传入的是引用
//的时候,此时就不需要进行值拷贝,形参可以直接使用实参的值,若我们在程序中不希望我们传入的参数的值被修改,需要在引用的时候参数列表前加const

/由上述思考引提出下列解决方案/
/*
template
T abc_xyz(const T& x,const T& y,const T& z) //传参时传入引用值,而且是const的,作输入型参数,值只能使用,不能修改
{
return x+y+z
}
*/
//函数的返回值也是可以返回一个具体类型的数或者是一个引用,当函数返回引用时 如下 T& func(T &a, T &b);该函数返回一个引用
//int main(int argc, char *argv[])
//{
// int a = 5,b = 3,c= 1;
// cout<<abc_Add(a,b,c)<<endl;
// float m = 0.5,n = 0.3,p = 0.8;
// cout<<abc_Add(m,n,p)<<endl;
//}
//递归函数的概念,在c语言中,使用递归可以计算斐波那契数列,或者算某一个数的某阶运算同样在c++中也可以使用递归算法。递归一般分为两种,一种是直接递归一种是间接递归
//直接递归的概念:直接递归是说递归函数A在其内部有显式地调用自己的语句出现,这是直接递归。
//间接递归的概念:间接递归是说在函数内部,并无明显地出现直接调用其本身的语句,但是有调用函数B,函数B内部又调用函数C,函数C又返回来调用函数A这种递归的算法就是间接递归
//编写递归函数需要遵循的一个基本原则:递归收敛,当一个函数在做递归运算时该运算必须是收敛的。

//编写一个简单的递归算法实现的某一数组的元素值的和

template
T Cacu_Array(T a[],int N) //a为某一定义的具体的数组名,N为数组的元素个数
{
if(N > 0)
{
return Cacu_Array(a,N-1) + a[N-1];
}
return 0;
}
int main()
{
int Array[5] = {1,2,3,4,5};
int Sum = Cacu_Array(Array,5);
cout<<Sum<<endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_41218453/article/details/86522647