【c++深度问题分析16】函数模板的概念和意义

泛型编程的概念

、 不考虑具体数据类型的编程方式,对于Swap数值交换函数可以考虑下面的泛型写法

       Void   Swap( T & a ,  T&  b)

{

      T  t  = a;

      a  = b;

      b = t;

}

swap  泛型写法中的T 不是一个具体的数据类型,而是泛指任意的数据类型

c++ 中泛型编程

  函数模板

     一种特殊的函数,可用不同类型进行调用,看起来和普通函数很相似,区别是类型可被参数化

    template  < typename   T>

   void  Swap( T & a, T & b)

{

     T t  = a;

     a = b;

    b = t;

}

template 关键字 用于声明开始进行泛型编程

typename 关键字用于声明泛指类型

意义: 可以代码复用,在算法中尤其用到比较多

下面通过一段函数模板使用示例代码展示其意义:

#include <iostream>
#include <string>

using namespace std;

template < typename T >
void Swap(T& a, T& b)
{
    T c = a;
    a = b;
    b = c;
}

template < typename T >
void Sort(T a[], int len)
{
    for(int i=0; i<len; i++)
    {
        for(int j=i; j<len; j++)
        {
            if( a[i] > a[j] )
            {
                Swap(a[i], a[j]);
            }
        }
    }
}

template < typename T >
void Println(T a[], int len)
{
    for(int i=0; i<len; i++)
    {
        cout << a[i] << ", ";
    }
    
    cout << endl;
}

int main()
{
    int a[5] = {5, 3, 2, 4, 1};
    
    Println(a, 5);
    Sort(a, 5);
    Println(a, 5);
    
    string s[5] = {"Java", "C++", "Python", "go", "c#"};
    
    Println(s, 5);
    Sort(s, 5);
    Println(s, 5);
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lvmengzou/article/details/87520122