首页 > 后端开发 > C++ > 正文

C++如何定义函数模板实现通用算法

P粉602998670
发布: 2025-09-07 09:40:02
原创
394人浏览过
函数模板是C++泛型编程的基石,通过类型参数化实现通用算法。使用template<typename T>定义,可编写适用于多种类型的函数,如myMax、printPair、printArray和bubbleSort,编译器根据调用时的实际类型自动实例化具体函数,提升代码复用性与灵活性。

c++如何定义函数模板实现通用算法

在C++中,要实现通用算法,函数模板是那个不可或缺的基石。它允许我们编写一份通用的函数代码,这份代码可以处理各种不同的数据类型,而无需为每一种类型都重新写一遍。简单来说,就是通过类型参数化,让你的函数变得“聪明”起来,能适应不同的输入类型,从而实现真正意义上的泛型编程。

函数模板的核心思想,其实就是把类型当作参数来传递。你想想看,我们平时写函数,参数是值;现在,我们让参数可以是“类型”。这样一来,比如你要写一个比较两个数大小的函数,传统做法可能要写

max(int, int)
登录后复制
max(double, double)
登录后复制
,甚至
max(std::string, std::string)
登录后复制
。但有了函数模板,你只需要写一个
max<T>(T a, T b)
登录后复制
,编译器就能根据你传入的实际类型,自动生成对应的具体函数。

通义万相
通义万相

通义万相,一个不断进化的AI艺术创作大模型

通义万相 596
查看详情 通义万相

定义一个函数模板,语法上非常直观:

template <typename T>
登录后复制
或者
template <class T>
登录后复制
,这两种写法是等价的,
typename
登录后复制
更推荐,因为它明确表示
T
登录后复制
是一个类型。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // for std::sort

// 示例1: 最简单的通用max函数
template <typename T>
T myMax(T a, T b) {
    return (a > b) ? a : b;
}

// 示例2: 带有多个类型参数的函数模板
template <typename T1, typename T2>
void printPair(T1 val1, T2 val2) {
    std::cout << "Pair: " << val1 << ", " << val2 << std::endl;
}

// 示例3: 非类型模板参数,比如用于固定大小数组
// 这种用法在C++11/14之前比较常见,现在通常用std::array
template <typename T, int N>
void printArray(const T (&arr)[N]) { // 注意这里引用数组的写法
    std::cout << "Array elements (" << N << "): ";
    for (int i = 0; i < N; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

// 示例4: 一个简单的通用排序函数 (虽然实际中会用std::sort)
template <typename T>
void bubbleSort(std::vector<T>& vec) {
    for (size_t i = 0; i < vec.size(); ++i) {
        for (size_t j = 0; j < vec.size() - 1 - i; ++j) {
            if (vec[j] > vec[j+1]) {
                T temp = vec[j];
                vec[j] = vec[j+1];
                vec[j+1] = temp;
            }
        }
    }
}

int main() {
    std::cout << "Max of int: " << myMax(5, 10) << std::endl;
    std::cout << "Max of double: " << myMax(3.14, 2.71) << std::endl;
    std::cout << "Max of string: " << myMax(std::string("world"), std::string("hello")) << std::endl;

    printPair(10, "C++");
    printPair(3.14, true);

    int intArray[] = {1, 5, 2, 8};
    printArray(intArray);

    std::vector<int> intVec = {5, 2, 9, 1, 7};
    std::cout << "Original vector: ";
    for (int x : intVec) std::cout << x << " ";
    std::cout << std::endl;
    bubbleSort(intVec);
    std::cout << "Sorted vector: ";
    for (int x : intVec) std::cout << x << " ";
    std::cout << std::endl;

    std::vector<std::string> strVec = {"banana", "apple", "cherry"};
    std::cout << "Original string vector: ";
    for (const std::string& s : strVec) std::cout << s << " ";
    std::cout << std::
登录后复制

以上就是C++如何定义函数模板实现通用算法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号