C++提高之泛型编程
C++泛型编程和STL技术详解,C++更深层的使用
1 模板
1.1 模板的概念
模板的特点:
模板的通用并不是万能的
1.2 函数模板
1.2.1 函数模板语法
函数模板的作用:
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表
语法:
template<typename T>
函数声明或定义
解释:
template -- 声明创建模板
typename -- 表面其后面的符号是一种数据类型,可以用class代替
T -- 通用的数据类型,名称可以替换,通常为大写字母
示例:
#include <iostream> using namespace std; // 交换两个整型函数 void swapInt(int &a, int &b) { int temp = a; a = b; b = temp; } // 交换两个浮点型函数 void swapDouble(double &a, double &b) { double temp = a; a = b; b = temp; } // 函数模板 // 声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用数据类型 template<typename T> void mySwap(T &a, T &b) { T temp = a; a = b; b = temp; } void test01() { int a = 10; int b = 20; // swapInt(a, b); // 利用函数模板交换 // 两种方式使用函数模板 // 1、自动类型推导 // mySwap(a, b); // 2、显式指定类型 mySwap<int>(a, b); cout << "a=" << a << endl; cout << "b=" << b << endl; double c = 1.1; double d = 2.2; swapDouble(c, d); cout << "c=" << c << endl; cout << "d=" << d << endl; } int main() { test01(); return 0; }
总结:
1、函数模板利用关键字 template
2、使用函数模板有两种方式:自动类型推导、显式指定类型
3、模板的目的是为了提高代码复用性,将类型参数化
1.2.2 函数模板注意事项
注意事项:
1、自动推导类型,必须推导出一致的数据类型T,才可以使用
2、模板必须要确定出T的数据类型,才可以使用
示例:
总结:
使用模板时必须确定通用数据类型T,并且能够推导出一致的数据类型
1.2.3 函数模板案例
案例描述:
1、利用函数模板封装一个排序的函数,可以对不同的数据类型数组进行排序
2、排序规则从大到小,排序算法为选择排序
3、分别利用char数组和int数组进行测试
示例: