泛型编程简介

数据结构课程的特点
-专注于数据元素之间的关系
-专注于特定结构之上的算法

数据结构课程并不关注数据元素的具体类型。

泛型编程的概念
-不考虑具体数据类型的编程方式
对于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关键字用于声明泛指类型

函数模板的使用
-自动类型推导调用
-具体类型显示调用

int a = 0;
int b = 1;
Swap(a,b)    //自动推导

float c = 2;
float d = 3;
Swap<float>(c,d)  //显示调用
#include <iostream>

using namespace std;

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

int main()
{
    int a = 2;
    int b = 1;

    Swap(a, b);

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    double c = 0.01;
    double d = 0.02;

    Swap<double>(c, d);

    cout << "c = " << c << endl;
    cout << "d = " << d << endl;
    return 0;
}

C++中的类模板
-以相同的方式处理不同的类型
-在类声明前使用template进行标识
-<typename T> 用于说明类中使用的泛指类型T

template <typename T>
class Operator
{
public:
    T op(T a, T b);
};

类模板的应用
-只能显示指定具体类型,无法自动推导
-使用具体类型<Type>定义对象

Operator<int> op1;
Operator<double> op2;
int i = op1.op(1, 2);
double d = op2.op(0.01, 0.02);

小结:

模板是泛型编程理论在C++中的实现
函数模板支持参数的自动推导和显示指定
类模板在使用时只能显示指定类
类模板非常适用于编写数据结构相关的代码

原文地址:https://www.cnblogs.com/-glb/p/12031720.html