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

这篇文章的主要内容是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://xiahunao.cn/news/1382136.html

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

相关文章

[Excel]Excel函数和用法(4)——查找字符串,SEARCH和FIND函数

区别&#xff1a;SEARCH大小写不敏感&#xff0c;FIND大小写敏感 作用&#xff1a;都是从左到右返回搜索到的字符串的起始位置 SEARCH语法&#xff1a;SEARCH(find_text, within_text, [start_num]) FIND语法&#xff1a;FIND(find_text, within_text, [start_num]) 如果指…

binary_search函数用法

STL之二分查找 (Binary search in STL) Section I 正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第45条的一个总结&#xff0c;阐述了各种查找算法的异同以及使用他们的时机。 首先可供查找的算法大致有count,f…

FIND函数嵌入INDEX和MATCH函数,简直就是万金油查找!!!

FIND函数大家通常是用来截取内容, 但是当你搭配到INDEX和MATCH,你会发现这个搭配非常巧妙,也非常强大. 这是一份销售表: 中间的品类繁多.名称都是细节型号. 需求: 现在这些品牌需要打折,折扣表如下: 难点: 上方是产品的型号详细描述,而我们需要给品牌打折. 例如: 第一行…

VBA里的文本函数 find() search() substitute() replace() match() large() 在EXCEL工作表使用和VBA中使用差别的对比

1 find() 1.1 worksheetfunction.find() 工作表函数FIND(find_text, within_text, [start_num])FINDB(find_text, within_text, [start_num]) 中文字符等会识别为2位返回的是 要查找的内容在字符串内的位数。 局限性区分大小写&#xff0c;不允许通配符 如果在VBA中使用&a…

Excel的查找和引用函数:VLOOKUP、OFFSET、MATCH、INDEX、INDIRECT

文章目录 一.函数清单二.详解函数1.VLOOKUP()2.OFFSET()3.MATCH()4.INDEX()5.INDIRECT()6.综合练习 一.函数清单 函数介绍VLOOKUP()垂直方向查找OFFSET()计算偏移量MATCH()查找位置INDEX()查找数据ROW()引用行的数据COLUMN()引用列的数据INDIRECT()文本字符串指定的引用HLOOKU…

Python-re中search()函数的用法-----查找ip(超详细)

1.首先来看一下search&#xff08;&#xff09;和find&#xff08;&#xff09;的区别 import re s1 "2221155" #search 字符串第一次出现的位置 print(re.search("1",s1)) print(s1.find("1"))它们的输出分别是&#xff1a; search()&#x…

index+match函数/一对多查找匹配,可以代替Vlookup函数的使用。

在表格的列的顺序混乱的时候&#xff0c;vlookup函数choose&#xff0c;vlookup函数match&#xff0c;vlookupcolumn函数并不好用&#xff0c;可以试一下indexmatch函数的组合。 . 首先介绍一下index函数&#xff0c; 语法INDEX(数组或区域&#xff0c; 行号&#xff0c; 列号)…

二分查找法(函数binary_search)

目录 定义 复杂度 解析 函数binary_search 代码实现 运行结果 总结 定义 二分查找也叫折半查找&#xff0c;是一种高效率的查找方法&#xff0c;但是折半查找方法要求顺序存储结构&#xff0c;按关键字大小有序排列。 复杂度 时间复杂度即是while循环的次数。 二分查找的…

数据结构:查找(Search)【详解】

友情链接&#xff1a;数据结构专栏 目录 查找【知识框架】 查找概论一、查找的基本概念 顺序表查找一、定义二、算法 有序表查找一、折半查找二、插值查找三、斐波那契查找 线性索引查找一、稠密索引二、分块索引三、倒排索引 二叉树排序与平衡二叉树一、二叉排序树1、定义2、…

一文搞懂VLOOKUP、INDEX、MATCH函数

最近&#xff0c;在学习数据分析方向的东西&#xff0c;众所周知&#xff0c;Excel是数据分析所不可或缺的工具&#xff0c;由于过往并没有对Excel进行过深入研究&#xff0c;因此当首次接触到Excel中的函数时&#xff0c;不可避免地被其中一些函数的逻辑绕得有些晕&#xff0c…

查找匹配函数FIND和SEARCH的基本用法

一、Excel中FIND函数和SEARCH函数的用法 FIND函数区分大小写,不支持通配符 **SEARCH ** 函数不区分大小写,支持通配符 有这样一个产品: 注:文本 “KitchenAId 和 Stockwell”内有空格 现在我们看这两个函数的用法: 1.FIND(find_text,within_text, [start_num]) 注意:…

Excel字符函数(3):字符查找函数Find、Search

工作中&#xff0c;有时候编号与时间、短信回复内容、评论内容等常有混在一起需要拆分的情况&#xff0c;还有一些从数据库Oracle、Mysql等导出的数据字段内容需要拆分&#xff0c;那么除了MID、LEN、SUBSTITUTE等字符函数外&#xff0c;用的最多的就是Find、Search函数了。 &a…

简单使用Search()函数

给出两个范围&#xff0c;返回一个ForwardIterator&#xff0c; 查找成功指向第一个范围内第一次出现子序列 (第二个范围)的位置&#xff0c;查找失败指向last1。重载版本使用自定义的比较操作。 std::vector<int> vec { 1,2,3,4,5,4,4,4,4,2,3 }; std::vector<int&…

Excel中SEARCH函数的使用方法

SEARCH函数是Excel中常用的文本查找函数&#xff0c;它可以返回查找指定的文本字符在某个字符串中的位置。它的语法结构是SEARCH(find_text,within_text,[start_num]) 如下图A列是随机生成的一些数值&#xff0c;现在想要查找出数值4在这些数值中的位置。 在C2单元格录入公式SE…

C++ search()函数用法详解(深入了解,一文学会)

find_end() 函数用于在序列 A 中查找序列 B 最后一次出现的位置。那么&#xff0c;如果想知道序列 B 在序列 A 中第一次出现的位置&#xff0c;该如何实现呢&#xff1f;可以借助 search() 函数。 search() 函数定义在<algorithm>头文件中&#xff0c;其功能恰好和 find…

如何让你的 Win10 任务栏全透明?

Windows7有系统自带的任务栏透明&#xff0c;但Windows10没有&#xff0c;怎么办呢&#xff1f;没关系&#xff0c;我们用下面这款软件就可以啦&#xff0c;就在微软商店里面&#xff0c;可以免费下载。 配合自动隐藏任务栏食用更佳 最后再关掉小娜&#xff0c;我们来看看效果…

win10 怎么把任务栏变透明

win10系统任务栏颜色重&#xff0c;看起来十分不舒服&#xff0c;那么怎样增加它的透明度呢&#xff1f;一起来看具体步骤&#xff1a; 1.进入设置—>个性化—>颜色&#xff0c;开启“透明效果”选项。 2.按win R&#xff0c;打开运行&#xff0c;输入“regedit”&…

Win10 任务栏透明工具-TranslucentTB

之前比较痴迷Win10系统的美化_||&#xff0c;也找到了好多很好用的小工具&#xff0c;对于Win10的任务栏&#xff0c;一直在尝试让他透明化&#xff0c;&#xff08;深色壁纸还好&#xff0c;浅色壁纸简直不能忍。。&#xff09;&#xff0c;也试过startisback等等软件&#xf…

win10 任务栏全透明,一键设置(translucentTB)

方式1&#xff1a; 通过系统个性化设置任务栏为透明&#xff0c;但此方法可能行不通&#xff0c;就算设置成功了也是只有50%的透明度 要使任务栏全透明&#xff0c;只能采用方式2&#xff0c;使用软件translucentTB 方式2 可以实现win10任务栏全透明的工具&#xff1a; 链接…