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

devtools/2025/4/1 15:30:28/

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++ 会在调用时自动推导出类型,或者你可以显式指定类型参数。


http://www.ppmy.cn/devtools/172372.html

相关文章

数据结构与算法——顺序表之手撕OJ题

文章目录 一、前言二、拿捏OJ题2.1移除元素2.2删除有序数组中的重复项2.3合并两个有序数组 三、总结 一、前言 Do you study today?up在上一次已经讲解完毕了有关顺序表的所有知识&#xff0c;不知道大家是否已经沉淀完毕了呢&#xff1f;有一句老话说得好啊——光看不练假把…

Yolo系列之Yolov4的改进及网络框架

Yolov4的网络框架及改进对比 目录 Yolov4的网络框架及改进对比1 YOLOv41.1 概念1.2 核心特点1.3 优缺点 2 Bag of Freebies (BoF)2.1 概念2.2 数据增强2.3 网络正则化2.4 Label Smoothing标签平滑2.5 损失函数改进 3 Bag of Specials (BoS)3.1概念3.2 非极大值抑制的改进3.3 网…

C++异常处理完全指南:从原理到实战

文章目录 异常的基本概念基本异常抛出与捕获多类型异常捕获异常重新抛出异常安全异常规范&#xff08;noexcept&#xff09;栈展开与析构标准库异常总结 异常的基本概念 异常是程序运行时发生的非预期事件&#xff08;如除零、内存不足&#xff09;。C通过try、catch和throw提…

5G核心网(5GC)中5QI(5G QoS Identifier)

在5G核心网&#xff08;5GC&#xff09;中&#xff0c;**5QI&#xff08;5G QoS Identifier&#xff09;**是用于标识5G网络中不同服务质量&#xff08;QoS&#xff09;特性的关键参数。5QI通过定义一组QoS特性&#xff0c;帮助网络为不同的业务流分配资源并提供相应的服务质量…

优选算法的慧根之翼:位运算专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 一、位运算 基础位运算 共包含6种&(按位与&#xff0c;有0就是0)、|(按位或有1就是1)、^(按位异或&#xff0c;相同为0&#xff0c;相异为1)、~(按位取反&#xff0c;0变成1&#xff0c;1变成0)、<<(左…

一键去除图片和视频水印工具 - HitPaw Watermark Remover,支持win和mac系统(附下载地址)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、HitPaw Watermark Remover是什么&#xff1f;二、使用步骤三、下载地址总结 前言 在内容创作领域&#xff0c;图片与视频是传递信息、表达创意的关键媒介。…

JVM介绍

JVM类加载器 栈指令重排序 类的JVM内存分配 堆内存GC模型

媒体直播的力量:解锁新时代传播密码,引爆传播效应,媒介盒子分享

在这个信息爆炸的时代&#xff0c;如何有效地传递信息、吸引公众关注并引发广泛讨论&#xff0c;成为了传播领域的一大挑战。而媒体直播&#xff0c;作为一种新兴的传播方式&#xff0c;正以其独特的魅力和强大的影响力&#xff0c;解锁着新时代的传播密码&#xff0c;引爆了一…