6 模版

1.模板

1.1模板概念

就是提前准备好一些通用、可复用的东西。

C++提供两种模板机制:函数模板和类模板

1.2函数模板

1.2.1函数模板作用:

建立一个通用函数、其函数返回值类型和形参类型可以不具体确定,用一个虚拟的类型进行表示,和java的泛型一样。

语法:

template<typename T>

函数声明或定义

解释:

template  --声明创建模板

typename --表面其后面的符号是一种数据类型,可以用class代替

T  --- 通用的数据类型,名称可以替代,通常为大写字母 

代码示例:

//.h
#pragma once
//函数模板实例class template_func
{
public:template <typename T>void temp_func_swap(T &a,T &b);void normal_swap(int& a, int& b);};template<typename T>
inline void template_func::temp_func_swap(T& a, T& b)
{T temp = a;a = b;b = temp;
}
//.cpp
#include "template_func.h"void template_func::normal_swap(int& a, int& b)
{int temp = a;a = b;b = temp;
}
//.mian
#include "iostream"
using namespace std;
#include "template_func.h"
int main()
{int a = 1;int b = 2;template_func tf = template_func();//传统方法若a、b为float或double或其他类型时由于类型不匹配便需要重写一个新的函数tf.normal_swap(a, b);cout << "a=" << a << "b=" << b << endl;//采用函数模板则不需要重写//两种方式//1-类型自动推导tf.temp_func_swap(a, b);cout << "a=" << a << "b=" << b << endl;//2-显式指定类型tf.temp_func_swap<int>(a, b);cout << "a=" << a << "b=" << b << endl;system("pause");return 0;
}

运行结果:

注意:1.函数模板的声明要放在一起,不能一个在.h一个在.cpp中   解决方法参考1.3.7

           2.inline关键字是用于 函数前是表示将该函数直接插入到调用处而不生成函数副本,适用于小函数,优化函数调用,不适用于大函数,不然代码会过于臃肿。

1.2.2函数模板的注意事项

  • 自动类型推导,必须推导出一致的数据类型T,才可以使用

       即不能定义T为int 结果你传给char,这不是荒谬吗!

  • 模板必须要确定出T的数据类型,才可以使用

       即使你的函数模板没有用到T,那也要利用显示指定类型的方法给其一个类型,不然报错!

1.2.3函数模板案例-对不同类型的数组进行排序(int、char)

代码:


//.h代码
#pragma once
//函数模板实例
#include "iostream"
using namespace std;
class template_func
{
public:template<typename T>void sort(T arr[], int len);template<typename T>void swap(T& a, T& b);template<typename T>void print(T arr[],int len);
};
template<typename T>
inline void template_func::temp_func_swap(T& a, T& b)
{T temp = a;a = b;b = temp;
}template<typename T>
inline void template_func::sort(T arr[], int len)
{for (int i = 0; i < len; i++){int index_max = i;for (int j = i + 1; j < len; j++){if (arr[index_max] > arr[j]){index_max = j;}}if (index_max != i){swap(arr[index_max],arr[i]);}}
}template<typename T>
inline void template_func::swap(T& a, T& b)
{T temp = a;a = b;b = temp;
}template<typename T>
inline void template_func::print(T

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

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

相关文章

spring-boot redis stream消息队列demo-及死信简单处理

Redis stream 是 Redis 5 引入的一种新的数据结构&#xff0c;它是一个高性能、高可靠性的消息队列&#xff0c;主要用于异步消息处理和流式数据处理。在此之前&#xff0c;想要使用 Redis 实现消息队列&#xff0c;通常可以使用例如&#xff1a;列表&#xff0c;有序集合、发布…

Vue3中ElementPlus组件二次封装,实现原组件属性、插槽、事件监听、方法的透传

本文以el-input组件为例&#xff0c;其它组件类似用法。 一、解决数据绑定问题 封装组件的第一步&#xff0c;要解决的就是数据绑定的问题&#xff0c;由于prop数据流是单向传递的&#xff0c;数据只能从父流向子&#xff0c;子想改父只能通过提交emit事件通知父修改。 父&a…

scrapy的概念作用和工作流程

1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted[twɪstɪd]异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/zh_…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文&#xff0c;本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…

Prometheus 架构全面解析

在本指南中&#xff0c;我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统&#xff0c;能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标&#xff0c;并根据阈值收到警报。 此外&#xff0c;在当今世界&#xff0c;可观…

风口抓猪-借助亚马逊云科技EC2服务器即刻构建PalWorld(幻兽帕鲁)私服~~~持续更新中

Pocketpair出品的生存类游戏《幻兽帕鲁》最近非常火&#xff0c;最高在线人数已逼近200万。官方服务器亚历山大&#xff0c;游戏开发商也提供了搭建私人专用服务器的方案&#xff0c;既可以保证稳定的游戏体验&#xff0c;也可以和朋友一起联机游戏&#xff0c;而且还能自定义经…

【PyTest】玩转HTML报告:修改、汉化和优化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…

Ubuntu findfont: Font family ‘SimHei‘ not found.

matplotlib中文乱码显示 当我们遇到这样奇怪的问题时, 结果往往很搞笑 尝试1不行 Stopping Jupyter Installing font-manager: sudo apt install font-manager Cleaning the matplotlib cache directory: rm ~/.cache/matplotlib -fr Restarting Jupyter. 尝试2 This work fo…

vue实现甘特图

目录 实现效果 一、安装依赖 二、使用 二、绕过license 实现效果 一、安装依赖 npm i --save vue-gantt-schedule-timeline-calendar 实现甘特图需先安装上述依赖&#xff0c;安装依赖实际上是通过gantt-schedule-timeline-calendar来实现的。所以node_module中因包含以下…

openssl3.2 - 测试程序的学习 - test\sanitytest.c

文章目录 openssl3.2 - 测试程序的学习 - test\sanitytest.c概述笔记添加好实现的工程效果END openssl3.2 - 测试程序的学习 - test\sanitytest.c 概述 openssl3.2 - 测试程序的学习 重建工程参考 makefile, 将该加的实现加入vs2019工程, 不能无脑添加, 否则编译不过. 这个工…

掌握可视化大屏:提升数据分析和决策能力的关键(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Nginx,安装及基础配置

目录 下载 Nginx Nginx 目录 配置文件 主要配置 events server 启动与关闭 方法一 方法二 方法三 查看是否启动成功 下载 Nginx 官网中文网 Nginx 目录 conf&#xff1a; 存放 核心配置文件 contrib&#xff1a; 存放 语法支持脚本 docs&#xff1a; …