C++模板知识点总结

C++模板知识点总结

模板是C++语言中非常强大的特性之一,它允许我们编写泛型代码,从而能够处理不同数据类型的通用算法和数据结构。C++模板主要包括函数模板和类模板。以下是对C++模板相关知识点的总结。

1. 什么是模板

模板是一种通用的代码结构,能够根据具体的类型生成相应的代码。在C++中,模板分为函数模板和类模板。

2. 函数模板

函数模板允许我们编写与数据类型无关的函数。模板参数可以是类型参数,也可以是非类型参数。

定义函数模板:

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

使用函数模板:

int main() {int a = 5, b = 10;double x = 5.5, y = 10.5;std::cout << add(a, b) << std::endl;   // 输出 15std::cout << add(x, y) << std::endl;   // 输出 16.0return 0;
}
3. 类模板

类模板允许我们创建与数据类型无关的类。

定义类模板:

template <typename T>
class Box {
private:T value;
public:Box(T v) : value(v) {}T getValue() {return value;}
};

使用类模板:

int main() {Box<int> intBox(123);Box<double> doubleBox(456.78);std::cout << intBox.getValue() << std::endl;   // 输出 123std::cout << doubleBox.getValue() << std::endl; // 输出 456.78return 0;
}
4. 模板特化

模板特化是指为特定类型提供专门化的实现。当需要对某个特定类型进行特殊处理时,可以使用模板特化。

定义模板特化:

template <typename T>
class Box {
private:T value;
public:Box(T v) : value(v) {}T getValue() {return value;}
};// 为 `char*` 类型提供特化
template <>
class Box<char*> {
private:char* value;
public:Box(char* v) : value(v) {}const char* getValue() {return value;}
};

使用模板特化:

int main() {Box<int> intBox(123);Box<char*> strBox("Hello");std::cout << intBox.getValue() << std::endl;    // 输出 123std::cout << strBox.getValue() << std::endl;    // 输出 Helloreturn 0;
}
5. 模板的默认参数

模板参数可以有默认值,当不指定模板参数时,会使用默认值。

定义带默认参数的模板:

template <typename T = int>
class Box {
private:T value;
public:Box(T v) : value(v) {}T getValue() {return value;}
};

使用带默认参数的模板:

int main() {Box<> intBox(123);   // 使用默认的 `int` 类型Box<double> doubleBox(456.78);std::cout << intBox.getValue() << std::endl;    // 输出 123std::cout << doubleBox.getValue() << std::endl; // 输出 456.78return 0;
}
6. 变量模板(C++14)

变量模板允许我们定义模板化的变量。

定义变量模板:

template <typename T>
constexpr T pi = T(3.1415926535897932385);

使用变量模板:

int main() {std::cout << pi<float> << std::endl;   // 输出 3.14159std::cout << pi<double> << std::endl;  // 输出 3.14159std::cout << pi<long double> << std::endl; // 输出 3.14159return 0;
}
7. 模板的编译和实例化

模板在使用时才会实例化,即在编译时根据使用模板的具体类型生成相应的代码。这种特性使得模板具有很高的灵活性,但也可能导致编译时间较长。

8. 总结

模板是C++中非常强大且灵活的特性,它使得代码可以重用,并且能够适应多种数据类型。理解并掌握模板的使用,对于编写高效、通用的代码具有重要意义。无论是函数模板还是类模板,都是我们在编程过程中不可或缺的工具。希望通过这篇总结,大家能够更好地理解和使用C++模板,为自己的编程之路增添一份力量。

谢谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM中完全消除矩阵乘法,效果惊人!10亿参数在FPGA上运行功耗接近大脑!!

一直以来&#xff0c;矩阵乘法&#xff08;MatMul&#xff09;在神经网络操作中占据主导地位&#xff0c;主要因为GPU针对MatMul进行了优化。 老黄一举揭秘三代GPU&#xff01;打破摩尔定律&#xff0c;打造AI帝国&#xff0c;量产Blackwell解决ChatGPT全球耗电难题 这种优化使…

【适配鸿蒙next】Flutter 新一代混合栈管理框架

前言 据最新消息显示&#xff0c;华为今年下半年将全面转向其自主平台HarmonyOS&#xff0c;放弃Android系统。 报道中提到&#xff0c;下一版HarmonyOS预计将随华为即将推出的Mate 70旗舰系列一起发布。 据悉&#xff0c;HarmonyOS Next 已经扩展到4000个应用程序&#xff0c;…

C++【STL】改造红黑树简单模拟实现set map(带你了解set map的底层实现结构)

目录 一、学前铺垫&#xff08;泛型编程&#xff09; 二、改造红黑树 1.红黑树节点的改造 2.insert的改造 3.迭代器的实现 4.完整改造代码 三、set的模拟实现封装 四、map的模拟实现封装 五、完结撒❀ 前言&#xff1a; 下面为了简单模拟实现set map所出现的代码是以…

Tensorflow入门实战 P03-天气识别

目录 1、完整代码 2、运行结果 2.1 查看20张图片 2.2 程序运行 2.3 运行结果 3、小结 ① 代码运行过程中有报错&#xff1a; ② 修改代码如下&#xff1a; ③ 分析原因&#xff1a; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&…

NDIS Filter开发-PNP响应和安装

NDIS filter驱动可能是最容易生成的驱动之一&#xff0c;如果你安装了VS 2015 WDK之后&#xff0c;你可以直接生成一个能运行的Filter驱动&#xff0c;它一般是ndislwf。 和大部分硬件不同&#xff0c;NDIS Filter驱动介于软件和硬件抽象层之上&#xff0c;它和硬件相关&…

SpringCloud Gateway中Route Predicate Factories详细说明

官网地址&#xff1a;https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。 Spring Cloud Gateway …

使用 GPT-4 创作高考作文 2024年

使用 GPT-4 创作高考作文 2024年 使用 GPT-4 创作高考作文&#xff1a;技术博客指南 &#x1f914;✨摘要引言正文内容&#xff08;详细介绍&#xff09; &#x1f4da;&#x1f4a1;什么是 GPT-4&#xff1f;高考作文题目分析 ✍️&#x1f9d0;新课标I卷 人类智慧的进步&…

Linux网络安全

文章目录 一、网络安全概述二、常用服务端口三、 ping命令的使用3.1、ping命令的简单概述3.2、ping命令的使用 四、资源限制4.1、查看系统资源限制4.2、临时修改资源限制4.3、永久修改资源限制 五、网络安全服务工具介绍5.1、ClamAV5.2、Nmap5.3、Wireshark5.4、Netcat5.5、Sno…

【C51】C51单片机实现的 抽奖机 设计与编程指南

文章目录 前言&#xff1a;1. 实现效果2. 准备工作3. 编写代码总结&#xff1a; 前言&#xff1a; 在本文中&#xff0c;我们将介绍如何使用C51单片机来实现一个简单的抽奖机。这个项目不仅能够展示C51单片机的基本应用&#xff0c;还能让我们了解如何通过编程来控制硬件&…

9.3 Go 接口的多态性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Django 视图类

在Django框架中&#xff0c;视图类&#xff08;Class-based views&#xff0c;简称CBVs&#xff09;提供了一个面向对象的方式来定义视图。这种方式可以让你通过创建类来组织视图逻辑&#xff0c;而不是使用基于函数的视图&#xff08;Function-based views&#xff0c;简称FBV…

Python中的贪婪算法详解与应用

关于Python中的贪婪算法 在计算机科学和算法设计中&#xff0c;贪婪算法是一种构建近似解法的重要策略。贪婪算法的核心思想在于每一步都选择当前状态下最优的解&#xff0c;以期通过一系列局部最优解最终达到全局最优。尽管贪婪算法并不总是能够找到全局最优解&#xff0c;但…

详解FedAvg:联邦学习的开山之作

FedAvg&#xff1a;2017年 开山之作 论文地址&#xff1a;https://proceedings.mlr.press/v54/mcmahan17a/mcmahan17a.pdf 源码地址&#xff1a;https://github.com/shaoxiongji/federated-learning 针对的问题&#xff1a;移动设备中有大量的数据&#xff0c;但显然我们不能收…

minio的一个基础使用案例:用户头像上传

文章目录 一、minio下载安装&#xff08;Windows&#xff09;二、案例需求分析三、后端接口开发 一、minio下载安装&#xff08;Windows&#xff09; 1. 下载minio服务端和客户端 minio下载地址 2. 手动搭建目录 /minio/binmc.exeminio.exe/data/logs手动创建minio应用程序目…

面试 Redis 八股文十问十答第五期

面试 Redis 八股文十问十答第五期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;如何用 Redis 统计海量 UV…

vivado HW_DEVICE

硬件设备 描述 在Vivado Design Suite的硬件管理器功能中&#xff0c;每个硬件目标都可以 具有一个或多个Xilinx FPGA设备进行编程或用于调试目的。这个 hw_device对象是通过hw_server打开的hw_target上的物理部分。这个 current_hw_device命令指定或返回当前设备。 相关对象 硬…

关于样本方差的分母是 ( n-1 ) 而不是 ( n )的原因

样本方差的分母是 ( n-1 ) 而不是 ( n ) 的原因与统计学中的“自由度”概念有关。使用 ( n-1 ) 作为分母可以使样本方差成为总体方差的无偏估计量。 自由度 在计算样本方差时&#xff0c;我们需要先计算样本均值 ( \bar{x} )。样本中的 ( n ) 个数据点中&#xff0c;实际上只…

Linux—小小内核升级

本篇主要是讲述下关于内核的一些基本常识&#xff0c;并记录下内核升级和编译的过程&#xff0c;若有遗漏/有误之处&#xff0c;望各位大佬们指出。 Ⅰ 基本内核常识 常见内核安装包 内核(kernel)&#xff1a;这是Linux操作系统的核心部分&#xff0c;它负责管理系统的硬件和…

Vue3学习第二天记录

Vue3学习第二天记录 背景说明截图记录一个简单的JS文件Vue3的watch()函数Vue3的toRef()/toRefs()函数前端数据类型的分类前端写一个对外暴露的函数前端的...语法Vue3中watch()函数的总结Vue3中watchEffect()函数Vue3中watch()函数的坑Vue3中computed()函数 背景 最近在学习尚硅…

Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想

文章目录 1.下载并安装Vue2.使用Vue2.1 创建Vue以及挂载Vue2.2 模板语句的数据来源&#xff1a;data2.3 template配置项详解2.4 Vue实例和容器的关系 3.安装devtools4.MVVM分层思想5.通过vm可以访问哪些属性 1.下载并安装Vue &#xff08;1&#xff09;Vue是一个基于JavaScrip…