1. 数据结构与泛型编程
(1)数据结构专注于数据元素之间的关系,并不关注数据元素的具体类型。
(2)数据结构专注于特定结构上的算法
(3)泛型编程是不考虑具体数据类型的编程方式,很适合编写数据结构的相关代码。
2. C++中的函数模板
(1)一种特殊的函数,可用于不同类型进行调用
(2)看起来和普通函数相似,区别是类型是可被参数化
(3)函数模板的语法规则
①template关键字用于声明开始进行泛型编程
②typename关键字用于声明泛指类型
(4)函数模板的使用
①自动类型推导调用
②具体类型显式调用
3. C++中的类模板
(1)以相同的方式处理不同的类型
(2)在类声明前使用template进行标识
(3)<typename T>用于说明类中使用的泛指类型T
(4)类模板的应用
①只能显式指定具体类型,无法自动推导
②使用具体类型<Type>定义对象
【编程实验】初探函数模板和类模板的使用
//main.cpp
#include <iostream> using namespace std; //函数模板 template <typename T> void Swap(T& a, T& b) { T t = a; a = b; b = t; } //类模板 template <typename T> class Op { public: T process(T v) { return v * v; } }; int main(int argc, char *argv[]) { /*函数模板调用示例*/ int a = 2; int b = 1; Swap(a, b); //自动类型推导 cout <<"a = " << a << ", b = "<< b << endl; double c = 0.01; double d = 0.02; Swap<double>(c, d); //显式指定类型 cout <<"c = " << c << ", d = "<< d << endl; cout << endl; /*类模板调用示例*/ Op<int> opInt; Op<double> opDouble; cout << "5 * 5 = " << opInt.process(5) << endl; //类模板必须显式指定类型 cout << "0.3 * 0.3 = " << opDouble.process(0.3) << endl; return 0; } /*输出结果 a = 1, b = 2 c = 0.02, d = 0.01 5 * 5 = 25 0.3 * 0.3 = 0.09 */
4. 小结
(1)模板是泛型编程理论在C++中的实现
(2)函数模板支持的自动推导和显式指定
(3)类模板在使用时只能显式指定类型
(4)类模板非常适用于编写数据结构相关的代码