C++ STL学习笔记 : 1. template 模板函数
本篇文章是学习C++ STL库的第一篇笔记,主要记录了使用template关键字创建模板函数的方法。
下面用一个非常简单的例子解释模板函数的用法 :
#include <iostream>
using namespace std;template <class T>
void myswap(T& a, T& b)
{T temp = a;a = b;b = temp;
}int main()
{int a = 10;int b = 20;cout << "a: " << a << " b: " << b << endl;myswap(a,b);cout << "a: " << a << " b: " << b << endl;double c = 11.5;double d = 3.14;cout << "c: " << c << " d: " << d << endl;myswap<double>(c,d);cout << "c: " << c << " d: " << d << endl;return 0;
}
输出结果如下:
使用模板函数最大的优点,在于我们可以对一类函数进行统一定义,这类函数一般内部的逻辑相同,唯一的区别在于使用的参数,变量类型不同。使用模板函数对这一类函数进行统一定义,在调用和维护时都会更为方便。在上述例子中,我们实现了一个调换两个变量值的函数,这个函数可以调换任意两个同类型变量的值。
在使用模板函数时,首先我们使用关键字template定义一个变量类型的类,例如这里的T。我们可以同时定义几个变量类型的类:
template <class T1, class T2...>
在调用模板函数时有两种方式,第一种和普通函数一样调用,例如上述例子中的:
myswap(a,b);
或者也可以定义好具体的类型:
myswap<double>(c,d);
1.需要注意的是,template定义的类模板,只对下一个函数有效。也就是说每次使用模板函数需要重新使用template关键字,一个模板函数对应一个template关键字。
2.模板函数仍然可以像普通函数一样被重载。
3.当模板函数和普通函数都满足调用的条件,程序会优先调用普通函数。
4.模板函数在调用的时候,其参数的类型必须严格对应,否则无法调用。
本篇文章主要参考了youtube视频,链接如下:
https://www.youtube.com/watch?v=xEz4jdKEfSI&list=PLzKtnppOmiXD-pyI4bjNzn9Km2ugRkdUK&index=1
C++ STL学习笔记 : 1. template 模板函数相关推荐
- C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍
继续学习侯捷老师的课程! 在前面的博客<C++ STL学习笔记(2) 容器结构与分类>中介绍了STL中常用到的容器以及他们的使用方法,在我们使用容器的时候,背后需要一个东西支持对内存的使用 ...
- Vue学习笔记进阶篇——Render函数
本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...
- C++ STL学习笔记
C++ STL学习笔记一 为何要学习STL: 数据结构与算法是编程的核心,STL中包含各种数据结构和优秀的算法,确实值得深入学习,本文中虽然着重使用,但希望有心的朋友能多看看相关数据结构的实现,对于C ...
- 《Go语言圣经》学习笔记 第五章函数
<Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...
- C++STL学习笔记(4) 分配器(Allocator)
在前面的博客<C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍>中,简单的介绍了分配器再STL的容器中所担当的角色,这一节对STL六大部件之一的分配器进行详细 ...
- 没有varselect这个函数_JavaScript学习笔记(四)-- 函数基础
函数基础 我们代码里面所说的函数和我们上学的时候学习的什么三角函数.二次函数之类的不是一个东西 函数的概念 对于 js 来说,函数就是把任意一段代码放在一个 盒子 里面 在我想要让这段代码执行的时候, ...
- 【Python学习笔记】第八章 函数
[Python学习笔记]第八章 函数 文章目录 [Python学习笔记]第八章 函数 前言 8.1 定义函数 8.2 调用函数 8.2.1 使用位置参数调用函数 8.2.2 使用关键字参数调用函数 8 ...
- Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?)
Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?) 个人学习经验,仅供参考,欢迎各位码友批评指正. 做项目敲代码时,一直不是很理解监听函数是个什么玩意. 按我目前的理解,说白 ...
- oracle数据变化记录,学习笔记:Oracle伪列函数ora_rowscn 记录表中行数据的修改时间...
天萃荷净 Oracle数据库开发时使用伪列函数ora_rowscn查询出数据库表中行数据的修改时间 一.默认情况下 –创建t_orascn测试表 SQL> create table t_oras ...
最新文章
- 后疫情时代,RTC期待新的场景大爆发
- WF4.0实战(四):博客申请流程
- 内部使用final参数的原因
- 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39
- SRE(Simple Rule Engine) Document
- Java基础知识盘点(二)- 集合篇
- .net 中使用rabbitmq
- Git : SSH 协议服务器
- 蓝桥杯C语言---基础练习
- java实训鉴定表_java实习自我鉴定材料定稿(资料4)
- Android WebView实现长截图
- Android-深色模式篇
- Springboot Swagger2 Unable to infer base url问题解决
- 9个比赛7进top10,阿里天池大数据竞赛思路分享
- 【2-SAT初学+模板题讲解】POJ3683 Priest John's Busiest Day
- 中国软件业失望与希望
- Revit建模软件:如何在Revit中准确放置族组件?
- utf-8 python 乱码prinnt u_python处理一些乱码的中文文本时decode('utf-8')报错的处理
- php做照片墙,照片墙作业练习
- Python3.6+PyQT5+Pyserial 实现简单串口助手