C++模板,STL(Standard Template Library)

news2024/11/27 20:30:29

这篇文章的主要内容是C++中的函数模板类模板STL的介绍

希望对C++爱好者有所帮助,内容充实且干货,点赞+收藏防止找不到!

再次感谢每个读者和正在学习编程的朋友莅临!

更多优质内容请点击移驾:

C++收录库:重生之C++启程(文章平均质量分93)

目录

 

1.模板

(1)函数模板

(2)类模板

2.认识STL

(1)什么是STL

(2)STL的六大组件

(3)如何学习STL


1.模板

(1)函数模板

假设一个场景:当我们要写一个swap()函数时候,是不是要这样写

#include<iostream>
using namespace std;
void swap(int& a,int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	swap(a, b);
	return 0;
}

那当我们同时又想交换两个char类型的变量,是不是得这样写

#include<iostream>
using namespace std;
void swap(int& a,int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
void swap(char& c, char& d)
{
	char tmp = c;
	c = d;
	d = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	swap(a, b);
	char c = 's';
	char d = 'b';
	swap(c, d);
	return 0;
}

这样写构成了函数的重载,使得对应类型与对应的函数相匹配,每次交换时找到合适类型的函数。

虽然函数重载一定程度上解决了不同类型形参调用相同功能函数的需求,但是当每次有新的参数类型需求,又需要程序猿自己写一份重载函数出来。

由于这两个swap()函数的功能完全相同,只是参数类型不同,再写一份属实tm烦。

这时,顺应需求的模板就闪亮登场啦。

函数模板定义:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本

函数模板格式:template<class T1,class T2…>

                          函数形参(T1 a,T2 b)

光看这个格式可能有点突兀,下面就用swap函数来感受一下函数模板的魅力

#include<iostream>
using namespace std;
template <class T>//函数模板
void newswap(T& a,T& b)
{
	T tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	newswap(a, b);
	char c = 's';
	char d = 'b';
	newswap(c, d);
	return 0;
}

运用函数模板,代码明显更加简短,且不同类型形参,newswap函数都能应对自如

原理:函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器

模板实例化:用模板去产生特定具体类型函数的过程称作模板的实例化

隐式实例化:让编译器自己推演模板参数的T的类型。例如上图,在swap函数调用时编译器可以通过实参的类型实例化模板参数T,从而产生T类型的函数供我们调用

但是编译器推演不出来就会报错:

显式实例化:在模板函数调用时程序猿手动控制T的类型。

#include<iostream>
using namespace std;
template <class T>
void newswap(T& a,T& b)
{
	T tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	newswap<int>(a, b);
	return 0;
}

 

此时就是模板的显式实例化,程序猿显式实例化后,编译器就不会去推演模板参数T的类型了。

(2)类模板

类模板的大致思路和函数模板相同。

也是一个类只是由于参数的类型不同就得写不同参数类型的类。便将模板特性运用在类上。使得一份类模板可以同时供应不同类型参数的类需求,非常好用。

2.认识STL

(1)什么是STL

对于C++爱好者来说,STL可以说是C++标准库里最常用的工具库。它不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。熟练使用STL以及学习STL底层是必不可少的。

(2)STL的六大组件

(3)如何学习STL

第一境界:熟练使用STL

第二境界:了解STL底层

第三境界:扩充STL

总结:能用,能理,能扩展。


下篇文章开始进入C++中STL的深入学习。

今天的内容就分享到这里啦,如果对大家有所帮助,记得点赞收藏不迷路。订阅下方C++专栏。持续爆肝C++实用知识。

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

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

相关文章

重复delete 对象指针后的 异常调用栈怪异 解析

Release版VC6 MFC程序 程序正常退出时得到一个如下异常调用栈&#xff1a;​ 0:000> kb# ChildEBP RetAddr Args to Child WARNING: Frame IP not in any known module. Following frames may be wrong. 00 0019eb94 76124f2f 00c3afc8 0019ebdc 001…

k8部署安装

1 环境初始化 1.1 检查操作系统的版本 此方式下安装kubernetes集群要求Centos版本要在7.5或之上 [rootmaster ~]# cat /etc/redhat-release Centos Linux 7.5.1804 (Core)1.2主机名成解析 三台服务器的/etc/hosts文件 192.168.90.100 master 192.168.90.106 node1 192.168.…

【雕爷学编程】Arduino动手做(09)---火焰传感器模块5

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

ASP.NET Core - 缓存之分布式缓存

分布式缓存是由多个应用服务器共享的缓存&#xff0c;通常作为访问它的应用服务器的外部服务进行维护。 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性&#xff0c;尤其是当应用由云服务或服务器场托管时。 与其他将缓存数据存储在单个应用服务器上的缓存方案相比&am…

【深度学习】再谈向量化

前言 向量化是一种思想&#xff0c;不仅体现在可以将任意实体用向量来表示&#xff0c;更为突出的表现了人工智能的发展脉络。向量的演进过程其实都是人工智能向前发展的时代缩影。 1.为什么人工智能需要向量化 电脑如何理解一门语言&#xff1f;电脑的底层是二进制也就是0和1&…

vmware克隆虚拟机后没有ip地址的问题

克隆虚拟机后&#xff0c;发现新克隆出来的虚拟机&#xff0c;有ens33网卡&#xff0c;但是没有192.168开头的ip&#xff0c;如下&#xff1a; 那是因为克隆后的虚拟机与之前的虚拟机ip重复导致&#xff0c;解决办法如下&#xff1a; 进入如下目录 cd /etc/sysconfig/networ…

优思学院|6西格玛标准值水平是多少?

在质量管理和统计学领域&#xff0c;"6西格玛" 是一个重要的概念&#xff0c;它与产品和流程的质量有着密切的关系。本文将解释"6西格玛"标准值水平是什么&#xff0c;以及它在各个行业中的应用。 什么是6西格玛标准值水平&#xff1f; 理解西格玛 西格…

ospf重发布

华子目录 一、实验拓扑二、实验要求三、实验思路1、配置接口IP地址以及环回地址&#xff08;以此类推&#xff09;2、配置动态路由协议3、重发布4、更改接口类型5、配置路由策略 一、实验拓扑 二、实验要求 1、使用双点双向重发布2、所有路由器进行最佳选路3、存在备份路径&am…

眼镜中的“黑科技”| 3D打印眼镜为您带来全新配戴体验

3D打印定制眼镜 你的眼镜应为你而生 每次换眼镜的时候&#xff0c;近视人士往往都会遇到选镜框的烦恼…… “这个镜框风格我喜欢&#xff0c;但是尺寸不合适&#xff0c;好可惜” “孩子调皮好动&#xff0c;镜架总是摔坏” “想要一款眼镜&#xff0c;适合头围大、瞳距小…

h3c 7506 IRF和MAD多活配置案例

IRF配置 irf mac-address persistent always irf auto-update enable irf auto-merge enable undo irf link-delay irf member 1 priority 1 irf member 2 priority 32 irf mode normal irf-port 1/2 port group interface Ten-GigabitEthernet1/1/0/39 mode enhanced port g…

司徒理财:8.11黄金最新走势分析早盘1914现价多

黄金昨日再次破位新低&#xff0c;但是下跌力度出现衰竭迹象&#xff0c;意味着本次下跌暂时告一段落&#xff0c;行情将会开启一波反弹&#xff0c;早盘1914现价直接多&#xff0c;先看反弹上涨&#xff01;黄金从走势上看&#xff0c;日线上已经跌至前低附近&#xff0c;也是…

Zabbix6 对接飞书告警

文章目录 Zabbix对接飞书告警背景创建飞书群组Zabbix配置创建告警媒介类型创建动作用户关联飞书告警 Zabbix对接飞书告警 背景 运维 你看下他的进程是不是挂了&#xff0c;之前在9点28分有发消息的&#xff0c;这次没有发消息 哐哐哐的去看了一通&#xff0c;确实有个进程之前…

[保研/考研机试] KY80 进制转换 北京大学复试上机题 C++实现

题目链接&#xff1a; KY80 进制转换https://www.nowcoder.com/share/jump/437195121691735660774 描述 写出一个程序&#xff0c;接受一个十六进制的数值字符串&#xff0c;输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。 输入描述&#xff1a; 输…

机器学习、深度学习项目开发业务数据场景梳理汇总记录一

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理&#xff0c;文章会随着项目的开发推进不断更新。 一、MSTAR雷达影像数据 MSTAR&#xff08;Moving and Stationary Target Acquisition and Recognition&#xff09;雷达影像数据集是一种常用的合成孔…

数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)

目录 开放地址法的查找性能 线性探测法 平方探测法和双散列探测法 期望探测次数与装填因子的关系 分离链接法的查找性能 总结 散列表的性能分析 平均查找长度&#xff08;ASL&#xff09;用来度量散列表查找效率&#xff1a;成功、不成功关键词的比较次数&#xff0c;取…

YOLOv8+ByteTrack多目标跟踪(行人车辆计数与越界识别)

课程链接&#xff1a;https://edu.csdn.net/course/detail/38901 ByteTrack是发表于2022年的ECCV国际会议的先进的多目标跟踪算法。YOLOv8代码中已集成了ByteTrack。本课程使用YOLOv8和ByteTrack对视频中的行人、车辆做多目标跟踪计数与越界识别&#xff0c;开展YOLOv8目标检测…

AST入门与实战(一):基于babel库的js反混淆通用模板

AST入门与实战(一):基于babel库的js反混淆通用模板 首发地址:http://zhuoyue360.com/jsnx/106.html 1. 模板代码 通用模板来源自菜老板的知识星球. const fs require(fs); const types require("babel/types"); const parser require("babel/parser")…

为什么 Mixin 被认为是有害的

为什么 Mixin 被认为是有害的 Mixin 是在 Vue 2 中引入的&#xff0c;作为组件之间共享代码的解决方案&#xff0c;这种方式成为许多代码库不可或缺的一部分。然而&#xff0c;随着时间的推移&#xff0c;它们的使用开始出现问题。尽管 mixins 最初很有吸引力&#xff0c;但现…

今天我花了一个通宵的时间安装Windows11系统居然失败,忍不住哭了!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

Python爬虫:抓取表情包的下载链接

Python爬虫:抓取表情包的下载链接 1. 前言2. 具体实现3. 实现代码 1. 前言 最近发现了一个提供表情包的网址&#xff0c;觉得上面的内容不错&#xff0c;于是就考虑用Python爬虫获取上面表情包的下载链接。整体而言&#xff0c;实现这个挺简单的&#xff0c;就是找到提供表情包…