1.函数模板基础

1.1函数模板作用:


        建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表,提高复用性

1.2语法:

//第一种
template <typename T>
函数声明或定义//第二种
template <class T>
函数声明或定义

解释:
template:关键字,声明创建模板
typename和class:关键字,声明其后面的符号是一种数据类型,可以用class代替
T:通用的数据类型名称可以替换,通常为大小写

1.3示例:

#include<iostream>
#include<math.h>
using namespace std;//利用模板提供通用的交换函数
template < typename T >
void Swap(T & a, T & b)
{T temp = a;a = b;b = temp;
}void test()
{int a = 10, b = 20;//利用模板实现交换//1.自动类型推导Swap(a, b);//2.显方指定类型Swap<int>(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;
}int main()
{test();return 0;
}


1.4模板注意事项:


1.模板必须要确定出t的数据类型才可以使用

#include<iostream>
#include<math.h>
using namespace std;//利用模板提供通用的交换函数
template < typename T >
void func()
{cout << "func的调用" << endl;
}void test()
{func();
}int main()
{test();return 0;
}

        运行发现报错了,这是因为。没有确定出T的类型,下面我们显示的指定出T的类型:

#include<iostream>
#include<math.h>
using namespace std;//利用模板提供通用的交换函数
template < typename T >
void func()
{cout << "func的调用" << endl;
}void test()
{func<int>();
}int main()
{test();return 0;
}
//运行结果:
func的调用

1.5案例:

        1.创建一个通用的快速排序的函数模板,可以排序各种数据类型的数组中的元素

        2.创建一个通用的打印输出的函数模板,可以输出各种数据类型的数组中的元素

代码如下:

#include<iostream>
#include<stdlib.h>
using namespace std;#define SIZE 6//1.创建通用快速排序函数模板
template <class T>
void quick_sort(T num[], int low, int high )
{int i,j;T temp;T tmp;i = low;j = high;tmp = num[low];   if(i > j)  {return;}while(i != j){while(num[j] <= tmp && i < j)   {j--;}while(num[i] >= tmp && i < j){i++;}if(i < j){temp = num[j];num[j] = num[i];num[i] = temp;}}num[low] = num[i];num[i] = tmp;quick_sort(num,low,i-1);quick_sort(num,i+1,high);
}//2.创建通用打印输出函数模板
template <typename T>
void Print(T array[SIZE])
{for(int i = 0; i < SIZE; i++){cout << array[i] << " ";}cout << endl;
}//测试函数
void test()
{//测试1//创建一个int数组int array1[SIZE] ={1, 2, 3, 4,5,6};//2.排序quick_sort<int>(array1,0,SIZE-1);//3.输出排序结果Print<int>(array1);//测试2//创建一个float数组float array2[SIZE] ={1.5, 2.5, 3.6, 4.4, 5.9, 6.7};//2.排序quick_sort<float>(array2,0,SIZE-1);//3.输出排序结果Print<float>(array2);
}
int main()
{test();return 0;
}

运行结果:

6 5 4 3 2 1
6.7 5.9 4.4 3.6 2.5 1.5

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

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

相关文章

AI趋势(06) Sora,AI对世界的新理解

说明&#xff1a;使用 黄金圈法则学习和解读Sora&#xff08;what、why、how&#xff09; 1 Sora是什么&#xff1f; 1.1 Sora的基本解读 Sora是OpenAl在2024年2月16日发布的首个文本生成视频模型。该模型能够根据用户输入的文本自动生成长达60秒的1080p复杂场景视频&#xf…

Android稳定性相关知识

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关方法论3.1 crash3.2 性能3.3 高…

Python:异常处理

异常处理已经成为判断一门编程语言是否成熟的标准&#xff0c;除传统的像C语言没有提供异常机制之外&#xff0c;目前主流的编程语言如Python、Java、Kotlin等都提供了成熟的异常机制。异常机制可以使程序中的异常处理代码和正常业务代码分离&#xff0c;保证代码更加优雅&…

Linux中MySQL表名与@TableName中大小写关系

在使用SpringBoot时&#xff0c;我们普遍会使用注解&#xff0c;实体类中使用注解TableName指明表&#xff0c;以下是TableName的一些注意事项。 【说明】 在MySQL中&#xff0c;表名的大小写处理与操作系统和数据库服务器的配置有关。MySQL默认是在Linux系统上区分大小写的&…

2024年重磅消息:来自OpenAI发布的视频生成模型Sora

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Jupyter的全面探索:从入门到高级应用

1. 引言 Jupyter项目的简介 Jupyter项目是一个开源项目&#xff0c;旨在为科学计算、数据分析和教育提供交互式计算和数据科学环境。它允许用户创建和共享包含实时代码、方程、可视化以及叙述性文本的文档&#xff0c;这些文档被称为“笔记本”。Jupyter支持超过40种编程语言…

自然语言编程系列(一):自然语言和程序语言介绍

1.自然语言和程序语言 自然语言和程序语言是两种截然不同但又相互关联的语言体系&#xff0c;它们分别服务于人类日常交流和计算机指令执行。 自然语言&#xff1a; 定义&#xff1a;自然语言是指人类在日常生活中使用的语言&#xff0c;如英语、汉语、法语等。它是非正式且灵…

Java的跨平台特性

Java语言特别流行的其中一个原因就是其具有良好的跨平台性&#xff0c;Java的跨平台性表现在通过 Java 语言编写的应用程序在不同的系统平台上都能够正常运行。其原理是&#xff1a;只要在需要运行 java 应用程序的操作系统上&#xff0c;先安装一个 Java 虚拟机(JVM Java Virt…

html表格标签(下):lable标签,select标签和textara标签

html表格标签(下)&#xff1a;lable标签&#xff0c;select标签和textarea标签 lable标签 搭配 input 使用,点击 label 标签就能选中对应的单选/复选框, 能够提升用户体验。 for 属性: 指定当前 label 和哪个相同 id 的 input 标签对应 (此时点击才是有用的) 运行效果&#x…

信息安全认证 | CISP证书怎么样?值得考吗?

HCIE考证研究所的朋友们&#xff0c;新年快乐&#xff01; 今天给大家说说CISP证书&#xff0c;新的一年祝大家逢考必过啊~ 01 考注册信息安全工程师证书的用处 CISP证书可作为学识和技能证明&#xff1b;求职、任职、晋升、加薪的资格凭证&#xff1b;用人单位招聘、录用劳动…

VueTreeselect 只能选择末级节点

场景&#xff1a;有些需求会要求只能选择末级节点。 解决办法&#xff1a;设置disable-branch-nodes为true。 <treeselectv-model"form.deptIds":options"deptOptions":show-count"true":limit"5"placeholder"请选择部门&quo…

FPGA之移位寄存器

SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D &#xff08;DI1 LUT 引脚&#xff09;和移出 Q31&#xff08;MC31 LUT 引脚&#xff09;线路将LUT级联&#xff0c;以形成更大…

智能家居控制系统:让生活更智能、更便捷

智能家居控制系统是一种集成了智能化技术的家居系统&#xff0c;通过连接各种智能设备和传感器&#xff0c;实现远程控制、自动化管理和智能化服务&#xff0c;让生活更智能、更便捷。以下是关于智能家居控制系统的几个方面的分点论述&#xff1a; 1. 远程控制功能&#xff1a;…

羊大师揭秘,如何挑选出好牧场的奶羊,该怎么看

羊大师揭秘&#xff0c;如何挑选出好牧场的奶羊&#xff0c;该怎么看 了解牧场的管理和环境&#xff1a;好的牧场应该有规范的管理制度&#xff0c;环境整洁&#xff0c;草场茂盛&#xff0c;为奶羊提供了充足的食物和良好的生活环境。在这样的牧场中&#xff0c;奶羊能够得到…

芯片的分类

目录 通用处理器数字信号处理器专用处理器 通用处理器 我们常听说的中央处理器CPU就是一种典型的通用处理器&#xff08;GPP&#xff09;。这种处理器多使用片上系统&#xff08;SoC&#xff09;的设计理念&#xff0c;在处理器上集成各种功能模块&#xff0c;每一种功能都是用…

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历 (力扣每日一题)

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a;输入&#xff1a…

视频如何去除水印?这三个方法赶紧收藏

在数字化内容的海洋中&#xff0c;视频已成为我们日常生活中不可或缺的一部分。然而&#xff0c;很多时候&#xff0c;我们渴望观看的优质视频内容却被水印所困扰。因此我们就需要视频去水印工具来帮助我们解决这些困扰。 一、水印云 水印云的视频去水印功能采用了先进的 AI …

【JavaEE】IP协议

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

笔试刷题(持续更新)| Leetcode 45,1190,781,739

45. 跳跃游戏 题目链接&#xff1a; 45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;这道题思路不难记&#xff0c;遍历数组每个位置&#xff0c;更新下一次的范围&#xff0c;当当前位置已经在当前范围之外时&#xff0c;步数一定得加一&#xff…

MySQL之select查询

华子目录 SQL简介SQL语句分类SQL语句的书写规范SQL注释单行注释多行注释 select语句简单的select语句select的算数运算select 要查询的信息 from 表名;查询表字段查询常量查询表达式查询函数 查询定义别名as安全等于<>去重distinct连接字段concat 模糊查询运算符比较运算…