一篇文章带你了解C++模板编程详解

yizhihongxing

一篇文章带你了解C++模板编程详解

什么是模板

C++模板是一种通用编程技术,允许程序员编写与类型无关的代码。模板使我们可以编写通用算法,例如排序和搜索,并应用于各种类型的数据,例如整数,浮点数,字符串等。

模板的基本思想是声明一次代码,然后使用不同的类型实例化以产生代码的不同版本。

函数模板

函数模板允许您编写与类型无关的代码来处理不同的数据类型。 声明函数模板的语法如下:

template <class/typename T>
return_type function_name(parameter_list)

其中 class/typename T 指定类型参数,可以是任何类型,在函数定义的代码中使用 T 代表类型参数。这使您可以编写仅使用类型而不使用特定类型数据的函数。

例如,以下是一个简单的函数模板,它用于将两个数相加:

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

然后可以将此函数模板用于处理不同类型的变量。

int a = 2, b = 3;
cout << add<int>(a, b) << endl;  // 输出 5

double x = 2.5, y = 3.5;
cout << add<double>(x, y) << endl; // 输出 6.0

类模板

类模板的语法与函数模板类似。 类模板中使用类型参数作为类的参数。 类定义中的代码使用类型参数而不是实际数据类型。 可以使用模板定义一个范型类,该类可以处理不同类型的数据。

例如,以下是一个简单的类模板,用于保存整数、浮点数和字符串三种类型的数据:

template<class T>
class Array {
  private:
    T *arr;
    int size;
  public:
    Array(T arr[], int n) {
        this->arr = new T[n];
        this->size = n;
        for (int i = 0; i < n; i++) {
            this->arr[i] = arr[i];
        }
    }

    void print() {
        for (int i = 0; i < this->size; i++) {
            cout << this->arr[i] << " ";
        }
        cout << endl;
    }
};

然后可以使用不同的类型创建Array实例:

int int_arr[] = {1, 2, 3, 4, 5};
Array<int> a(int_arr, 5);
a.print();  // 输出 1 2 3 4 5

double double_arr[] = {1.5, 2.5, 3.5, 4.5, 5.5};
Array<double> b(double_arr, 5);
b.print();  // 输出 1.5 2.5 3.5 4.5 5.5

string string_arr[] = {"apple", "banana", "orange"};
Array<string> c(string_arr, 3);
c.print();  // 输出 apple banana orange

示例一:以下是一个简单的模板实现,用于返回任意类型的最大值:

template <class T>
T getMax(T x, T y) {
    return (x > y) ? x : y;
}

它可以处理整数、浮点数和字符串等任何类型的字段。例如:

int a = 10, b = 20;
int max1 = getMax<int>(a, b);
cout << "Max integer is: " << max1 << endl;  // 输出 Max integer is: 20

double x = 30.5, y = 20.5;
double max2 = getMax<double>(x, y);
cout << "Max double is: " << max2 << endl;  // 输出 Max double is: 30.5

string s1 = "Hello";
string s2 = "World";
string max3 = getMax<string>(s1, s2);
cout << "Max string is: " << max3 << endl;  // 输出 Max string is: World

示例二:一个简单的模板实现,用于返回数组的最大元素:

template <class T>
T getMaxElement(T arr[], int n) {
    T max = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}

它可以处理整数、浮点数等任何类型的数组,例如:

int int_arr[] = {1, 5, 2, 3, 4};
int max1 = getMaxElement<int>(int_arr, 5);
cout << "Max integer is: " << max1 << endl;  // 输出 Max integer is: 5

double double_arr[] = {2.5, 1.5, 4.5, 3.5, 5.5};
double max2 = getMaxElement<double>(double_arr, 5);
cout << "Max double is: " << max2 << endl;  // 输出 Max double is: 5.5

string string_arr[] = {"hello", "world", "here", "are", "some", "strings"};
string max3 = getMaxElement<string>(string_arr, 6);
cout << "Max string is: " << max3 << endl;  // 输出 Max string is: world

总结

模板是一种通用编程技术,允许编写与类型无关的代码以处理不同类型的数据。函数模板和类模板是常见的模板类型,它们使代码可重用并更加灵活,可适用于多种类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你了解C++模板编程详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Win10一周年更新14328下载迅雷发生崩溃怎么办?官方解决方案出炉

    Win10一周年更新14328下载迅雷发生崩溃怎么办? 如果你在下载Win10一周年更新14328时,使用迅雷下载软件遭遇了崩溃,那么你需要根据以下步骤解决这个问题: 首先,打开迅雷应用,并点击“工具”选项卡。 接着,点击“选项”按钮,并选择“高级”选项卡。 在“高级”选项卡下,找到“系统设置”一栏,并且在“系统设置”下方的“文件系统自动监控”选项卡中,取消…

    other 2023年6月26日
    00
  • MySQL如何修改字段类型和字段长度

    MySQL修改字段类型和字段长度的过程相对简单,下面我将为大家详细讲解完整攻略,包含两个示例说明。 步骤一:使用ALTER TABLE命令修改字段类型 使用ALTER TABLE命令可以修改已有表格的字段类型。下面是一些示例: 将字段类型从INT改为VARCHAR(50) ALTER TABLE customers MODIFY column_name VA…

    other 2023年6月25日
    00
  • windows系统共享文件夹访问无需验证(输入用户名和密码)即可进入

    要实现Windows系统共享文件夹无需验证的设置,需要进行如下步骤: 步骤一:打开“本地安全策略”管理器 在 Windows 电脑上按下 Win+R 键,打开运行对话框。在对话框中输入 secpol.msc 并按下 Enter 键,即可进入本地安全策略管理器。 步骤二:禁用共享文件夹访问需要验证 在“本地安全策略”管理器窗口中,依次展开以下选项:本地策略 &…

    other 2023年6月27日
    00
  • 详细谈谈MYSQL中的COLLATE是什么

    MySQL中的COLLATE用于指定字符集的排序规则。简单地说,COLLATE规定了字符在排序、比较时的顺序。 在MySQL中,常见的字符集有utf8、utf8mb4、gbk等,在每个字符集下,都有多种COLLATE可供选择。一般来说,同一字符集下COLLATE的名称会有一定规律,如utf8字符集下,常见的COLLATE有utf8_general_ci、ut…

    other 2023年6月27日
    00
  • mybatis返回数组

    以下是“mybatis返回数组”的完整攻略: MyBatis返回数组 MyBatis是一种流行的Java持久化框架,它提供了一种简单的方式来执行SQL查询并将结果映射到Java对象中。在MyBatis中可以使用resultType或resultMap来指定查询结果的类型。如果查询结果是一个数组,可以使用以下方法来返回数组。 1 使用List 在MyBatis…

    other 2023年5月7日
    00
  • MySQL实现字段或字符串拼接的三种方式总结

    以下是MySQL实现字段或字符串拼接的三种方式总结的详细攻略。 方式一:使用concat函数进行字段或字符串拼接 基本语法 concat(str1,str2,…) 说明:str1,str2为要拼接的字段或字符串,可以有多个参数,拼接的顺序按照参数的输入顺序。 示例说明 例如,有一张学生信息表,字段包括:学号、姓名、性别、年龄,如下所示: stu_id s…

    other 2023年6月25日
    00
  • python获取本机外网ip的方法

    获取本机外网IP的方法有多种,下面我将介绍两种常用的方法。 方法一:使用第三方API 有一些第三方的IP查询接口可以用来获取本机的外网IP。其中一个常用的接口是https://api.ipify.org。你可以使用Python的requests库发送HTTP请求来获取外网IP。 首先,你需要安装requests库。在终端中运行以下命令: pip instal…

    other 2023年7月31日
    00
  • perl用{}修饰变量名的写法分享

    Perl用{}修饰变量名的写法分享 在Perl中,我们可以使用{}来修饰变量名,以实现一些特定的功能。下面是关于如何使用{}修饰变量名的详细攻略。 1. 使用{}访问哈希表元素 在Perl中,哈希表是一种用于存储键值对的数据结构。我们可以使用{}来访问哈希表中的元素。下面是一个示例: my %hash = ( name => ‘John’, age =…

    other 2023年8月8日
    00
合作推广
合作推广
分享本页
返回顶部