从0开始学习C++ 第二十课:模板与泛型编程
第二十课:模板与泛型编程
学习目标:
- 掌握模板的基本语法和概念。
- 学会使用函数模板来创建可重用的函数。
- 学习如何定义类模板以实现数据结构的泛型。
- 理解模板在C++中提供的灵活性和强大功能。
学习内容:
-
模板的概念:
模板是C++中支持泛型编程的一种工具,它允许程序员编写与数据类型无关的代码。模板可以应用于函数和类。 -
函数模板:
函数模板允许你编写一个适用于任何数据类型的函数。代码示例:
// 函数模板 template <typename T> T max(T a, T b) {return (a > b) ? a : b; }// 使用函数模板 int main() {int i = max(10, 5); // 使用int类型double d = max(10.5, 5.5); // 使用double类型cout << "Max of 10 and 5 is " << i << endl;cout << "Max of 10.5 and 5.5 is " << d << endl;return 0; } -
类模板:
类模板允许你创建可以处理任何数据类型的类。例如,你可以创建一个泛型的Array类,可以存储任何类型的数组。代码示例:
template <typename T> class Array { private:T* elements;int size; public:Array(int size) : size(size) {elements = new T[size];}~Array() {delete[] elements;}// 其他成员函数... };// 使用类模板 int main() {Array<int> intArray(12); // 整型数组Array<double> doubleArray(12); // 双精度浮点数组// ...使用数组return 0; } -
模板的使用场景:
当需要创建可在多种数据类型之间进行操作的函数或类时,模板是非常有用的。它们是实现算法库如STL(Standard Template Library)的基石。
练习题:
编写一个函数模板swap,它接受两个同类型的参数并交换它们的值。在main函数中,创建两个整数和两个字符串,使用你的swap函数模板来交换它们的值,并打印出交换前后的结果。
答案:
#include <iostream>
#include <string>
using namespace std;// 函数模板
template <typename T>
void swap(T& a, T& b) {T temp = a;a = b;b = temp;
}int main() {int num1 = 1, num2 = 2;string str1 = "Hello", str2 = "World";cout << "Before swap: " << num1 << " " << num2 << endl;swap(num1, num2);cout << "After swap: " << num1 << " " << num2 << endl;cout << "Before swap: " << str1 << " " << str2 << endl;swap(str1, str2);cout << "After swap: " << str1 << " " << str2 << endl;return 0;
}
预计输出效果:
Before swap: 1 2
After swap: 2 1
Before swap: Hello World
After swap: World Hello
在这个练习中,我们看到swap函数模板如何用于不同类型的数据,展示了模板在编写泛型代码中的强大能力。通过学习模板,我们可以提高代码的重用性和灵活性。
目录
第二十一课:异常处理
相关文章:
从0开始学习C++ 第二十课:模板与泛型编程
第二十课:模板与泛型编程 学习目标: 掌握模板的基本语法和概念。学会使用函数模板来创建可重用的函数。学习如何定义类模板以实现数据结构的泛型。理解模板在C中提供的灵活性和强大功能。 学习内容: 模板的概念: 模板是C中支持…...
pcl之滤波器(一)
pcl滤波器 pcl一共是有十二个主要模块,详细了解可以查看官网。https://pcl.readthedocs.io/projects/tutorials/en/latest/#basic-usage 今天学习一下pcl的滤波器模块。 滤波器模块,官网一共是提供了6个例程,今天先来看第一第二个。 直通…...
java项目性能优化(MyBatis中开启查询缓存及flushCache与useCache的使用)
在java项目中,如果需要大量的DB查询,导致缓存过多,项目运行缓慢,可以设置在select查询时,添加二级缓存的清空。 如果没有去配置flushCache、useCache,那么默认是启用缓存的。 1,flushCache默认…...
Unity3D控制人物移动的多种方法
系列文章目录 unity知识点 文章目录 系列文章目录前言一、人物移动之键盘移动1-1、代码如下1-2、效果 二、人物移动之跟随鼠标点击移动2-1、代码如下2-2、效果 三、人物移动之刚体移动3-1、代码如下3-2、效果 四、人物移动之第一人称控制器移动4-1、代码如下4-2、效果 五、And…...
无人机打击激光器
激光器的应用非常广泛,涵盖了多个领域。以下是一些主要的激光器应用: 医疗领域:激光器在医疗行业中有着重要应用,比如用于激光手术(如眼科手术)、皮肤治疗、牙科治疗、肿瘤治疗等。 工业制造:在…...
Lingo数学建模基础
1.基本运算符 1.1算数运算符 1.2逻辑运算 #not# 否定操作数的逻辑值,一元运算符 #eq# 若两运算数相等,则为true,否则为false #ne# 若两运算数不相等,则为true,否则为false #gt# 若左边运算数严格大于右边,则为true,否则为…...
finalshell连接linux的kali系统
kali的ssh服务似乎是默认关闭的,笔者在玩CentOS系统时可以直接用finalshell完成连接,但kali不行,需要先手动开启ssh服务。 开启kali的ssh服务 输入【ssh start】命令开启ssh服务,可以用【ssh status】命令查看ssh状态,…...
2、Line Charts折线图
可视化时间趋势 现在你已经熟悉了编码环境,是时候学习如何制作自己的图表了! 在本教程中,您将学习足够的Python来创建专业外观的折线图。然后,在接下来的练习中,您将使用您的最新技能处理真实世界的数据集。 本课程数据集夸克网盘下载链接:https://pan.quark.cn/s/a235ac…...
shell脚本获得所有数据库备份(整库备份,表级备份)
数据库备份到天翼云对象存储OBS https://blog.csdn.net/qq_34631220/article/details/135755894 1、获得所有数据库 #!/bin/sh HOSTNAME"ip" #数据库信息 PORT"3306" USERNAME"root" PASSWORD"" DBNAME"yusuan" #数据库…...
REVIT二次开发万能刷
将这两个参数赋予其他参数 步骤2 将来做个可以调控的版本 using System; using System.Collections.Generic; using System.Lin...
JSON简单了解
文章目录 1、JSON介绍2、ES6模版字符串3、JS对象转化为JSON字符串3.1、手动JS对象转化为JSON字符串3.2、自动JS对象转化为JSON字符串 4、JS对象和java互相转换 1、JSON介绍 JSON 概念:JavaScript Object Notation。JavaScript 对象表示法,简单理解JSON是…...
HarmonyOS鸿蒙应用开发( 四、重磅组件List列表组件使用详解)
List列表组件,是一个非常常用的组件。可以说在一个应用中,它的身影无处不在。它包含一系列相同宽度的列表项,适合连续、多行呈现同类数据,如商品列表、图片列表和和文本列表等。ArkUI 框架采用 List 容器组件创建列表(…...
redis优化系列(六)
本期分享redis内存过期策略:过期key的处理 Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。 可以通过修改配置文件来设置Redis的最大内存: maxmemory 1gb …...
【 Qt 快速上手】-②- Qt 环境搭建
文章目录 1. Qt 开发工具概述1.1 Qt Creator 介绍1.2 Visual Studio 介绍1.3 Eclipse 介绍 2. Qt SDK 的下载与安装2.1 Qt SDK 的下载2.2 Qt SDK 的安装2.3 验证 Qt SDK 安装是否成功2.4 Qt 环境变量配置 1. Qt 开发工具概述 Qt 开发环境需要安装三个部分: C编译器…...
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。 以下是几个面试技巧: 1. 复习核心概念:回顾 Ja…...
视觉空间效应
一、视觉空间效应 概况 视觉空间效应,是人类视觉系统(Human Visual System,HVS)的一个特点,也称为"视觉距离效应"。即距离观察者更近的目标像素对颜色感知产生更强烈的影响,而距离较远的目标像素…...
C#,入门教程(07)——软件项目的源文件与目录结构
上一篇: C#,入门教程(06)——解决方案资源管理器,代码文件与文件夹的管理工具https://blog.csdn.net/beijinghorn/article/details/124895033 创建新的 C# 项目后, Visual Studio 会自动创建一系列的目录与文件。 程序员后面的工…...
三国游戏(第十四届蓝桥杯)
题目 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 0)。 游戏有 n个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分别让 X,Y,Z 增加 A i , B…...
k8s---包管理器helm
内容预知 目录 内容预知 helm相关知识 Helm的简介与了解 helm的三个重要概念 helm的安装和使用 将软件包拖入master01上 使用 helm 安装 Chart 对chart的基本使用 查看chart信息 安装chart 对chart的基本管理 helm自定义模板 在镜像仓库中拉取chart,查…...
对于超低延迟SSD,IO调度器已经过时了吗?-part2
为了进行这项研究,他们设计了一套严谨的实验方法论,包括在配备了高速Intel Optane P4801X Series NVMe SSD的服务器上执行一系列微观和宏观基准测试,同时监测系统能耗情况。这些测试涵盖了多种工作负载场景,从单一进程提交大量请求…...
Bootstrap 下拉菜单:全面解析与应用指南
Bootstrap 下拉菜单:全面解析与应用指南 引言 Bootstrap 是一个流行的前端框架,它提供了丰富的组件和工具来帮助开发者快速构建响应式、美观的网页。其中,下拉菜单是 Bootstrap 中一个常用且重要的组件,它能够帮助用户在有限的空间…...
用Asian Beauty Z-Image Turbo做古风头像:简单三步生成独一无二的东方美学作品
用Asian Beauty Z-Image Turbo做古风头像:简单三步生成独一无二的东方美学作品 想象一下,你的社交媒体头像不再是一张普通的自拍或卡通形象,而是一幅充满东方韵味的古风艺术作品——可能是唐代仕女的温婉,宋代文人的儒雅…...
Graphormer部署教程:/etc/supervisor/conf.d/graphormer.conf配置解析
Graphormer部署教程:/etc/supervisor/conf.d/graphormer.conf配置解析 1. 项目介绍 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等…...
DAMO-YOLO实战:搭建教育科研AI视觉实验平台
DAMO-YOLO实战:搭建教育科研AI视觉实验平台 1. 教育科研中的AI视觉需求 在教育科研领域,视觉AI技术正成为重要的研究工具。传统计算机视觉实验平台往往面临部署复杂、性能有限、交互体验差等问题。DAMO-YOLO智能视觉探测系统为解决这些问题提供了创新方…...
告别Swagger注解污染:用smart-doc + Maven插件5分钟生成整洁API文档(SpringBoot实战)
零侵入API文档革命:smart-doc在SpringBoot项目中的极致实践 如果你曾经被Swagger注解污染代码所困扰,或是厌倦了在业务逻辑中嵌入大量文档相关注解,那么smart-doc可能会成为你API文档管理的新选择。作为一款基于源码解析的文档生成工具&#…...
整理 主流国产AI龙虾的核心能力对比表(支持平台/部署方式/适用场景)腾讯WorkBuddy 阿里JVS Claw 百度DuMate
根据当前的资料,腾讯WorkBuddy和百度的DuMate当前有一定一定量的免费额度,大家可以用起来! 主流国产AI龙虾的核心能力对比表 五款主流国产AI龙虾的核心能力对比表已整理完成,涵盖支持平台、部署方式与适用场景三大维度ÿ…...
ROS2 Humble下,如何用MoveIt! Action接口让机械臂“听话”?一个抓取demo的完整复盘
ROS2 Humble下机械臂精准控制实战:从MoveIt! Action接口到完整抓取任务 在工业自动化和服务机器人领域,机械臂的精准运动控制一直是核心挑战。ROS2 Humble版本中的MoveIt!框架为这一挑战提供了优雅的解决方案,而理解其Action接口的运作机制则…...
阿里语音识别模型WebUI实战:一键部署,会议录音秒变文字稿
阿里语音识别模型WebUI实战:一键部署,会议录音秒变文字稿 1. 引言:语音转文字的高效解决方案 在日常工作中,会议录音转文字是一项耗时又枯燥的任务。传统的人工听写方式不仅效率低下,还容易出错。现在,借…...
BilibiliDown:从技术视角重新定义B站视频下载体验
BilibiliDown:从技术视角重新定义B站视频下载体验 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...
Go 协程池任务调度架构
Go 协程池任务调度架构:高并发任务的智慧引擎 在现代高并发编程中,Go语言的协程(goroutine)以其轻量级和高效性成为开发者的首选。无限制地创建协程可能导致资源耗尽,而协程池(goroutine pool)…...
