当前位置: 首页 > news >正文

c++学习系列----006. c++模板(函数模板)

c++ 函数模板

文章目录

  • c++ 函数模板
    • C++ 函数模板概念
      • **函数模板**的作用:
    • 函数模板语法
    • 示例:冒泡排序
      • **代码解析**
      • **运行结果**
    • 函数模板的优势
    • 小结

C++ 函数模板概念

函数模板是 C++ 中的一个泛型编程特性,它允许你为不同的类型编写一个通用的函数定义,这样你就可以使用相同的函数名和相似的实现,处理不同的数据类型。

函数模板的作用:

  • 在编写代码时不需要为每种数据类型编写单独的函数
  • 提高代码的重用性和灵活性

函数模板语法

template <typename T>
T function_name(T arg1, T arg2) {
    // 函数实现
    return arg1 + arg2;
}
  • template <typename T>:定义一个类型参数 T,这个 T 可以是任意类型。
  • T function_name(T arg1, T arg2):函数的返回类型和参数类型都是 T,也就是根据模板类型来决定。

示例:冒泡排序

#include <iostream>
#include <array>

// 冒泡排序模板函数
template <typename T, size_t N>
void bubbleSort(std::array<T, N>& arr) {
    for (size_t i = 0; i < N - 1; ++i) {
        // 每次循环“冒泡”到最后的元素已经是最大值,所以减少一次比较
        for (size_t j = 0; j < N - i - 1; ++j) {
            if (arr[j] > arr[j + 1]) {
                // 交换两个元素
                std::swap(arr[j], arr[j + 1]);
            }
        }
    }
}

// 打印数组的模板函数
template <typename T, size_t N>
void printArray(const std::array<T, N>& arr) {
    for (const auto& element : arr) {
        std::cout << element << " ";
    }
    std::cout << "\n";
}

int main() {
    // 示例 1: 对整数数组排序
    std::array<int, 5> intArray = {64, 34, 25, 12, 22};
    std::cout << "Before sorting: ";
    printArray(intArray);

    bubbleSort(intArray);

    std::cout << "After sorting: ";
    printArray(intArray);

    // 示例 2: 对浮点数数组排序
    std::array<float, 5> floatArray = {64.5, 34.2, 25.1, 12.8, 22.0};
    std::cout << "Before sorting: ";
    printArray(floatArray);

    bubbleSort(floatArray);

    std::cout << "After sorting: ";
    printArray(floatArray);

    return 0;
}

代码解析

  1. 模板定义

    • 使用 template<typename T, size_t N> 定义一个泛型模板,允许冒泡排序函数适用于任何类型(如 intfloatdouble 等)和固定大小的数组。
  2. std::array 的使用

    • 使用 std::array 来处理固定大小的数组,模板参数 T 表示元素类型,N 表示数组大小。
  3. 冒泡排序逻辑

    • 使用两层嵌套循环逐步将最大值“冒泡”到数组末尾,每次循环比较相邻元素并交换它们。
  4. std::swap 的使用

    • 使用 STL 提供的 std::swap 函数交换两个元素。
  5. 打印函数模板

    • printArray 函数是另一个模板函数,用于打印数组内容,与 bubbleSort 模板共享相同的类型定义。

运行结果

示例代码会输出排序前和排序后的数组内容:

Before sorting: 64 34 25 12 22 
After sorting: 12 22 25 34 64 
Before sorting: 64.5 34.2 25.1 12.8 22 
After sorting: 12.8 22 25.1 34.2 64.5 

函数模板的优势

优势说明
类型通用允许函数处理多种类型,避免重载和重复编写函数
编译期检查模板会在编译期进行类型检查,避免运行时错误
代码简洁一个函数模板即可处理不同类型,减少冗余代码

小结

  • template <typename T> 定义了一个类型参数 T。
  • 可以用相同的函数模板处理不同的数据类型。
  • C++ 会在调用时自动推导出类型,或者你可以显式指定类型参数。

相关文章:

  • 静态网页应用开发环境搭建实战教程
  • Manim 输出视频尺寸设置
  • CD20.【C++ Dev】类和对象(11) 日期类对象的成员函数(++、--、日期-日期)
  • C++:allocator类(动态数组续)
  • Playwright设置base_url的三种方式
  • BUUCTF-web刷题篇(3)
  • PHP如何搭建设置代理http并加密使用?
  • PPT——组合SCI论文图片
  • 深入解析:MySQL 中 NULL 值是否占用 1 bit 存储空间?
  • “三小时搞定AI工具开发“:基于MCP的Node.js极简实践
  • Optional的stream方法,flatMap, filter应用
  • Imgui处理glfw的鼠标键盘的方法
  • stable diffusion webui 更改为python3.11版本运行Windows11
  • 【C++】右值引用与完美转发
  • 软件工程面试题(十)
  • 妙用《甄嬛传》中的选妃来记忆概率论中的乘法公式
  • 交换技术综合实验
  • 第四章.4.3.1ESP32传感器数据采集与滤波处理实战教程
  • 从0开始——在PlatformIO下开展STM32单片机的HAL库函数编程指南
  • ​​​​​​​​​​​​​​Spring Boot数据库连接池
  • 美的集团一季度净利增长38%,库卡中国机器人接单增超35%
  • 新质观察|重塑低空经济的系统安全观
  • 遭遇大规模停电,西班牙内政部宣布进入国家紧急状态
  • 四川省社科联期刊:不建议在读硕士、博士将导师挂名为第一作者
  • 工信部:加快自动驾驶系统安全要求强制性国家标准研制
  • 千亿市值光储龙头董事长向母校合肥工业大学捐赠1亿元