函数模板(Template)

server/2024/11/13 5:31:33/

文章目录

  • 前言
  • 一、函数模版?
    • 函数模版的作用
    • 函数模版的语法
    • 函数模版的两种调用方法
    • 示例
  • 总结


前言

在C++中,模板(Template)是一种泛型编程工具,它允许程序员编写与类型无关的代码。通过使用模板,可以创建可重用的函数和类,这些函数和类可以处理多种数据类型,而无需为每种数据类型都编写特定的代码。

一、函数模版?

函数模版的作用

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

函数模版的语法

template <typename T>  //注意这里不要加;
T add(T a, T b) {  return a + b;  
}  //如果无需返回值就用viod

函数模版的两种调用方法

1.自动类型推导:add(10,20);,注意这时候传入的参数类型必须一样
2.显示指定类型:add<int>(10,20);

示例

#include<iostream>using namespace std;//实现通用的对数组进行排序的函数
//规则 从大到小
//算法 选择
//测试char数组 、int数组template<class T>
void myswap(T &a, T &b) {T temp = a;a = b;b = temp;
}//排序算法
template<class T>
void mySort(T arr[], int len) {for (int i = 0; i < len; i++) {int max = i;//认定最大值的下标for (int j = i + 1; j < len; j++) {//如果认定的最大值比遍历的数值要小,说明j下标的元素才是真正的最大值if (arr[max] < arr[j]) {max = j;//更新最大值下标}}if (max != i) {//交换max和i下标的元素myswap(arr[max], arr[i]);}}
}//打印数组的模版
template<class T>
void printArray(T arr[], int len) {for (int i = 0; i < len; i++) {cout << arr[i] << "   ";}cout << endl;
}void test01() {char charArr[] = "badcfe";int num = sizeof(charArr) / sizeof(char);mySort(charArr, num);printArray(charArr, num);
}void test02() {int intArr[] = {7,5,9,6,2,1,3};int num = sizeof(intArr) / sizeof(int);mySort(intArr, num);printArray(intArr, num);
}int main() {//test01();test02();system("pause");return 0;}

总结

函数模板是C++泛型编程的重要组成部分,它允许程序员编写更加通用和可重用的代码。调用函数模版时候,主要有自动推导类型和显式指定类型。


http://www.ppmy.cn/server/9621.html

相关文章

li 与 li 之间有看不见的空白间隔是什么原因引起的?如何解决?

浏览器会把inline内联元素间的空白字符&#xff08;空格、换行、Tab等&#xff09;渲染成一个空格。 为了美观&#xff0c;通常是一个放在一行&#xff0c;这导致换行后产生换行字符&#xff0c;它变成一个空格&#xff0c;占用了一个字符的宽度。 解决办法&#xff1a; &…

如何判别三角形和求10 个整数中最大值?

分享每日小题&#xff0c;不断进步&#xff0c;今天的你也要加油哦&#xff01;接下来请看题------> 一、已知三条边a&#xff0c;b&#xff0c;c能否构成三角形&#xff0c;如果能构成三角形&#xff0c;判断三角形的类型&#xff08;等边三角形、等腰三角形或普通三角形 …

蓝桥杯刷题-货币系统

1371. 货币系统 - AcWing题库 #include <bits/stdc.h>using namespace std;typedef long long LL; const int N 30; LL v , n; LL f[10010]; LL ways 0;int main() {cin >> v >> n;f[0] 1; //初始化 f[0][0] 1 for(int i 1; i < v; i){int v;cin&g…

Java 队列queue的生产和消费

生产者&#xff1a;往队列里塞入消息&#xff0c;实现消费者&#xff0c;多个生产者的产生和消费 public interface AcctBalcQueue {void produce(Map<String, Object> objectsMap);Map<String, Object> getData(); }Component("ABC_QUEUE") public cla…

PCL:求点云在指定平面上的法向量

1.介绍 在点云处理中,有时我们需要基于指定的平面来计算点云的法向量。例如,在建筑物重建、地形分析、物体识别等应用中,我们可能已经知道了某些表面的几何特征,希望通过这些已知的信息来推导其他点的法向量。 基于指定平面求解点云的法向量在许多领域都有广泛的应用: 建…

java | junit | 基本+技巧

1.参考链接 1.1 单测概念 https://medium.com/lathasreeseeni/junit-2d9857773e8 1.2 高级技巧 https://symflower.com/en/company/blog/2023/how-to-write-junit-test-cases-advanced-techniques/ assertThrows&#xff1a; 有时候&#xff0c;我们的方法&#xff0c;需要抛出…

通俗解释卷积神经网络(CNN)或循环神经网络(RNN)的技术原理

让我们用一些通俗的例子来解释卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;的技术原理。 卷积神经网络&#xff08;CNN&#xff09; 例子&#xff1a;识别水果 想象一下&#xff0c;你有一个装满各种水果的篮子&#xff0c;你想要教会…

单链表题目

1.单向链表中的每个结点都需要动态分配内存空间。✔ 2.用链表代替数组进行数据操作时&#xff0c;查询更加方便。✘ 数组进行数据查询会更方便 3.链表是动态存储分配的数据结构。根据需要动态地开辟内存空间&#xff0c;可以比较自由方便地插入新元素&#xff08;结点)&#x…