1.函数模板基础

1.1函数模板作用:

建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表,提高复用性

1.2语法:

cpp 复制代码
//第一种
template <typename T>
函数声明或定义

//第二种
template <class T>
函数声明或定义

解释:

template:关键字,声明创建模板

typename和class:关键字,声明其后面的符号是一种数据类型,可以用class代替

T:通用的数据类型名称可以替换,通常为大小写

1.3示例:

cpp 复制代码
#include<iostream>
#include<math.h>
using namespace std;

//利用模板提供通用的交换函数
template < typename T >
void Swap(T & a, T & b)
{
    T temp = a;
    a = b;
    b = temp;
}

void test()
{
    int a = 10, b = 20;
    
    //利用模板实现交换
    //1.自动类型推导
    Swap(a, b);
    //2.显方指定类型
    Swap<int>(a, b);
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
}

int main()
{
    test();
    return 0;
}

1.4模板注意事项:

1.模板必须要确定出t的数据类型才可以使用

cpp 复制代码
#include<iostream>
#include<math.h>
using namespace std;

//利用模板提供通用的交换函数
template < typename T >
void func()
{
   cout << "func的调用" << endl;
}

void test()
{
    func();
}

int main()
{
    test();
    return 0;
}

运行发现报错了,这是因为。没有确定出T的类型,下面我们显示的指定出T的类型:

cpp 复制代码
#include<iostream>
#include<math.h>
using namespace std;

//利用模板提供通用的交换函数
template < typename T >
void func()
{
   cout << "func的调用" << endl;
}

void test()
{
    func<int>();
}

int main()
{
    test();
    return 0;
}
cpp 复制代码
//运行结果:
func的调用

1.5案例:

1.创建一个通用的快速排序的函数模板,可以排序各种数据类型的数组中的元素

2.创建一个通用的打印输出的函数模板,可以输出各种数据类型的数组中的元素

代码如下:

cpp 复制代码
#include<iostream>
#include<stdlib.h>
using namespace std;

#define SIZE 6

//1.创建通用快速排序函数模板
template <class T>
void quick_sort(T num[], int low, int high )
{
    int i,j;
    T temp;
    T tmp;

    i = low;
    j = high;
    tmp = num[low];   

    if(i > j)  
    {
        return;
    }

    while(i != j)
    {
        while(num[j] <= tmp && i < j)   
        {
            j--;
        }

        while(num[i] >= tmp && i < j)
        {
            i++;
        }

        if(i < j)
        {
            temp = num[j];
            num[j] = num[i];
            num[i] = temp;
        }
    }

    num[low] = num[i];
    num[i] = tmp;

    quick_sort(num,low,i-1);
    quick_sort(num,i+1,high);
}

//2.创建通用打印输出函数模板
template <typename T>
void Print(T array[SIZE])
{
    for(int i = 0; i < SIZE; i++)
    {
        cout << array[i] << " ";
    }
    cout << endl;
}


//测试函数
void test()
{
    //测试1
    //创建一个int数组
    int array1[SIZE] ={1, 2, 3, 4,5,6};
    //2.排序
    quick_sort<int>(array1,0,SIZE-1);
    //3.输出排序结果
    Print<int>(array1);
    
    //测试2
    //创建一个float数组
    float array2[SIZE] ={1.5, 2.5, 3.6, 4.4, 5.9, 6.7};
    //2.排序
    quick_sort<float>(array2,0,SIZE-1);
    //3.输出排序结果
    Print<float>(array2);
}
int main()
{
    test();
    return 0;
}

运行结果:

cpp 复制代码
6 5 4 3 2 1
6.7 5.9 4.4 3.6 2.5 1.5
相关推荐
软件黑马王子几秒前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
李少兄25 分钟前
Java 中只有值传递吗?
java·开发语言·python
tdtsmt35 分钟前
2026年SMT贴片加工选型指南:天地通电子推荐参考
c++
一木 之林44 分钟前
插件、MCP、Skill 的区别?
java·c++·人工智能
可乐鸡翅yeah_1 小时前
hls.js 播放质量埋点实战,采集卡顿、起播、错误指标定位线上用户问题
开发语言·前端·javascript·ecmascript·音视频·m3u8·音视频在线播放
szarron1 小时前
RF Demo Kit|NanoVNA 射频演示测试板完整上手教程,滤波器、衰减器、SOLT 校准学习板
开发语言·人工智能·学习·php·射频工程·频谱仪
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云
ShineWinsu1 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
万物智能信息科技1 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
蓝悦无人机2 小时前
Qt Design Studio(QDS)4.8.2项目文件结构详解
开发语言·qt·qt creator·qds·项目文件结构·qtc