简单掌握C++中的函数模板

简单掌握C++中的函数模板

函数模板为不同的数据类型提供了一种通用的代码实现方式,可以减少代码量,提高代码复用性。本文将介绍在C++中如何通过函数模板简单实现对不同数据类型的计算,并提供两个实例供参考。

定义模板函数

我们可以通过关键字template来定义模板函数,具体方式如下:

template <typename T>
T add(T a, T b){
    return a+b;
}

函数名为add<typename T>表示定义了一个通用的类型T,函数的两个参数都为类型T,函数返回值也是类型T。这样一来,我们就可以通过这个函数模板来实现intfloat等类型的加法操作了。值得注意的是,函数模板的实现并不是真的实现,而是C++编译器根据实际情况在编译时生成的。

调用模板函数

模板函数的调用方式和普通函数一样,只是需要指定具体的类型,如下:

int a = 5, b = 10;
float c = 1.5, d = 2.5;
// 调用add函数
cout << add(a,b) << endl; // 输出15
cout << add(c,d) << endl; // 输出4

在调用时,我们需要指定add函数的具体类型,这里分别为intfloat。这样编译器就会根据上面提供的函数模板生成对应的代码进行运算。

实战演练

示例一

现在我们有一个数组,需要计算出每一个元素平方的和。针对不同的数据类型,采用不同的方式进行计算。代码如下:

#include <iostream>
using namespace std;

template <typename T>
T sumOfSquare(T arr[], int n){
    T sum = 0;
    for(int i = 0; i < n; i++){
        sum += arr[i] * arr[i];
    }
    return sum;
}

int main(){
    int arr1[] = {1,2,3,4,5};
    float arr2[] = {1.1,2.2,3.3,4.4,5.5};
    double arr3[] = {1.1,2.2,3.3,4.4,5.5};
    cout << "sum of int: " << sumOfSquare(arr1, 5) << endl;
    cout << "sum of float: " << sumOfSquare(arr2, 5) << endl;
    cout << "sum of double: " << sumOfSquare(arr3, 5) << endl;
    return 0;
}

在上面的代码中,我们定义了一个sumOfSquare函数模板,用于计算对数组元素平方的和。由于不同数据类型的数组元素类型不同,我们使用了typename T来定义通用类型,并在函数中用T代替具体类型。

main函数中,我们创建了三个不同类型的数组,分别为intfloatdouble。通过调用sumOfSquare函数模板计算了这三个数组元素平方的和,结果如下:

sum of int: 55
sum of float: 55.55
sum of double: 55.55

可以看出,我们通过函数模板简单地实现了对不同数据类型的计算。

示例二

再来看一个例子,现在我们分别有intfloat类型的两个变量,需要将它们分别乘以2并输出结果。代码如下:

#include <iostream>
using namespace std;

template <typename T>
void doubleValue(T &x){
    x *= 2;
}

int main(){
    int a = 5;
    float b = 1.5;
    // 调用函数模板
    doubleValue(a);
    doubleValue(b);
    // 输出结果
    cout << "a: " << a << endl; // a: 10
    cout << "b: " << b << endl; // b: 3
    return 0;
}

在上面的代码中,我们定义了一个doubleValue函数模板,用于将传入的参数乘以2,此处需要使用引用(&)将传入的参数作为函数返回。在main函数中,我们创建了两个不同类型的变量,通过调用doubleValue函数模板将它们都乘以2,并输出结果。运行结果如下:

a: 10
b: 3

可以看出,我们通过函数模板简单地实现了对不同数据类型的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单掌握C++中的函数模板 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Python中的取模运算方法

    当我们需要计算两数之间的余数时,可以使用 Python 中的取模运算符 “%”(百分号). 其中,运算符左侧为被除数,右侧为除数。 示例1: a = 10 b = 3 print(a % b) # 输出为1 上面的代码中,a 为被除数,b 为除数,取模运算符 “%” 计算出 a 除以 b 的余数是 1。 示例2: x = -10 y = 3 print(x …

    C 2023年5月22日
    00
  • Gin框架之参数绑定的实现

    Gin框架之参数绑定的实现 1. 参数绑定 在Gin框架中,我们可以通过Context结构体中的方法Bind方法来进行参数绑定。Bind方法提供的参数绑定能力非常强大,支持多种类型的参数绑定,例如querystring参数、form参数、json格式参数、xml格式参数等。 2. 示例 2.1 绑定querystring参数 package main imp…

    C 2023年5月23日
    00
  • .Net行为型设计模式之策略模式(Stragety)

    .Net行为型设计模式之策略模式(Strategy) 策略模式概述 策略模式是一种行为型设计模式,它定义了一系列算法,并且将每个算法封装起来,使得它们可以互相替换。策略模式让算法的变化独立于使用它们的客户端。 策略模式的组成 策略模式由以下几个部分组成: Context:上下文对象,它持有一个具体策略的引用,并调用具体策略的算法。 Strategy:策略接口…

    C 2023年5月23日
    00
  • C语言 文件 I/O

    下面我将从以下几个方面详细地讲解“C语言 文件 I/O”的使用攻略: 文件输入/输出概念介绍 文件读取操作 文件写入操作 文件读写的应用示例 1. 文件输入/输出概念介绍 在程序中,有时候需要对外部文件进行读写操作,这就需要使用文件输入/输出(File I/O)操作了。文件输入/输出是指程序通过系统提供的文件操作函数(如fopen、fclose、fread、…

    C 2023年5月9日
    00
  • IOS Object-C 中Runtime详解及实例代码

    iOS Object-C 中Runtime详解及实例代码 1. Runtime简介 Runtime是OC的运行时系统。是一个由 C 语言编写的 底层的 Objective-C 对象(如实例和 Class)的管理系统。它是编译器和 CPU 的桥梁, Objective-C 的“动态”本质得以实现。 通过运行时机制,Objective-C能够实现动态绑定和方法调…

    C 2023年5月22日
    00
  • 三星Galaxy Book Flex值得入手吗 三星笔记本Galaxy Book Flex详细评测

    三星Galaxy Book Flex值得入手吗 三星笔记本Galaxy Book Flex详细评测 如果你正在寻找一款高性能、轻巧、功能强大的2合1笔记本,那么三星Galaxy Book Flex绝对值得一看。该笔记本采用最新一代的处理器,配备高清触摸屏和可旋转键盘,具备出色的性能和灵活的使用方式,让你随时随地体验高效便捷的计算体验。 性能和硬件 三星Gal…

    C 2023年5月22日
    00
  • C++中string使用+号与int拼接方式

    下面我将详细介绍C++中string使用+号与int拼接方式的攻略。 方式一:利用to_string()函数将int转为string类型 C++中,string类型可以通过在字符串后面直接添加“+”操作符的方式与另一个字符串或字符进行拼接,但无法直接与int类型拼接。在这种情况下,我们需要先将int类型转换为string类型,然后再进行拼接。 具体的步骤如下…

    C 2023年5月22日
    00
  • VSCode插件开发全攻略之package.json详解

    下面我会详细讲解“VSCode插件开发全攻略之package.json详解”的完整攻略。 前言 package.json是Node.js项目中的配置文件,也是VSCode插件开发中必不可少的一部分。它用于描述插件的信息、依赖项、命令脚本等,同时也是发布插件到市场上所必需的信息之一。这篇攻略将为大家详细讲解package.json的全部内容,从而帮助开发者更好…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部