08.泛型编程简介
原文:https://www.cnblogs.com/wanmeishenghuo/p/9496044.html
内容参考: 狄泰软件学院相关教程
数据结构课程的特点:
专注于数据元素之间的关系
专注于特定结构之上的算法
数据结构课程并不关注数据元素的具体类型
既然数据结构只关心数据元素之间的关系,我们只需要抽象的考虑数据元素之间的关系以及算法,不用关心具体的数据类型,因此,支持泛型编程的语言最适合数据结构的学习。因此,我们重点关注C++中的模板编程。
不考虑数据类型的编程方式:
C++中的函数模板:
template<typename T>是C++中特有的声明函数模板的方式。
函数模板的语法规则:
有了template <typename T>的声明,编译器就知道T是一个类型,就会把它当做一个类型处理。
函数模板的使用:
自动类型推导调用
具体类型显式调用
int a = 0;
int b = 1;
Swap(a, b); //自动推导
float c = 2;
float d = 3;
Swap<float>(c, d); //显式调用
函数模板示例程序如下:
#include <iostream> using namespace std; template <typename T> void Swap(T& a, T& b) { T t = a; a = b; b = t; } 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; return 0; }
运行结果如下:
使用模板我们不必指明具体类型,因此,学习数据结构时,我们完全可以用一个模板描述一个具体的算法。调用的时候再指定处理元素的具体类型。
C++中的类模板:
类模板的应用:
只能显式指定具体类型,无法自动推导。
使用具体类型<Type>定义对象。
Operator<int> op1;
Operator<double> op2;
int i = op1.op(1, 2);
double d = op2.op(0.01, 0.02);
类模板示例程序如下:
#include <iostream>
using namespace std;
template <typename T>
class Op
{
public:
T process(T v)
{
return v * v;
}
};
int main(int argc, char *argv[])
{
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;
}
执行结果如下:
小结:
模板是泛型编程理论在C++中的实现
函数模板支持参数的自动推导和显式指定
类模板在使用时只能显式指定类型
类模板非常适用于编写数据结构相关的代码
posted on 2020-04-04 22:51 lh03061238 阅读(170) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)