本篇文章是学习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 模板函数相关推荐

  1. C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍

    继续学习侯捷老师的课程! 在前面的博客<C++ STL学习笔记(2) 容器结构与分类>中介绍了STL中常用到的容器以及他们的使用方法,在我们使用容器的时候,背后需要一个东西支持对内存的使用 ...

  2. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  3. C++ STL学习笔记

    C++ STL学习笔记一 为何要学习STL: 数据结构与算法是编程的核心,STL中包含各种数据结构和优秀的算法,确实值得深入学习,本文中虽然着重使用,但希望有心的朋友能多看看相关数据结构的实现,对于C ...

  4. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  5. C++STL学习笔记(4) 分配器(Allocator)

    在前面的博客<C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍>中,简单的介绍了分配器再STL的容器中所担当的角色,这一节对STL六大部件之一的分配器进行详细 ...

  6. 没有varselect这个函数_JavaScript学习笔记(四)-- 函数基础

    函数基础 我们代码里面所说的函数和我们上学的时候学习的什么三角函数.二次函数之类的不是一个东西 函数的概念 对于 js 来说,函数就是把任意一段代码放在一个 盒子 里面 在我想要让这段代码执行的时候, ...

  7. 【Python学习笔记】第八章 函数

    [Python学习笔记]第八章 函数 文章目录 [Python学习笔记]第八章 函数 前言 8.1 定义函数 8.2 调用函数 8.2.1 使用位置参数调用函数 8.2.2 使用关键字参数调用函数 8 ...

  8. Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?)

    Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?) 个人学习经验,仅供参考,欢迎各位码友批评指正. 做项目敲代码时,一直不是很理解监听函数是个什么玩意. 按我目前的理解,说白 ...

  9. oracle数据变化记录,学习笔记:Oracle伪列函数ora_rowscn 记录表中行数据的修改时间...

    天萃荷净 Oracle数据库开发时使用伪列函数ora_rowscn查询出数据库表中行数据的修改时间 一.默认情况下 –创建t_orascn测试表 SQL> create table t_oras ...

最新文章

  1. 后疫情时代,RTC期待新的场景大爆发
  2. WF4.0实战(四):博客申请流程
  3. 内部使用final参数的原因
  4. 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39
  5. SRE(Simple Rule Engine) Document
  6. Java基础知识盘点(二)- 集合篇
  7. .net 中使用rabbitmq
  8. Git : SSH 协议服务器
  9. 蓝桥杯C语言---基础练习
  10. java实训鉴定表_java实习自我鉴定材料定稿(资料4)
  11. Android WebView实现长截图
  12. Android-深色模式篇
  13. Springboot Swagger2 Unable to infer base url问题解决
  14. 9个比赛7进top10,阿里天池大数据竞赛思路分享
  15. 【2-SAT初学+模板题讲解】POJ3683 Priest John's Busiest Day
  16. 中国软件业失望与希望
  17. Revit建模软件:如何在Revit中准确放置族组件?
  18. utf-8 python 乱码prinnt u_python处理一些乱码的中文文本时decode('utf-8')报错的处理
  19. php做照片墙,照片墙作业练习
  20. Python3.6+PyQT5+Pyserial 实现简单串口助手

热门文章

  1. 转载|网络编程中阻塞式函数的底层逻辑
  2. 求一个序列中最大的子序列_最大的斐波那契子序列
  3. mcq 队列_MCQ | 密码学中作为IDEA,DES,AES,RSA的块密码
  4. Java——集合(TreeSet)
  5. SDP协议基本分析(RTSP、WebRTC使用)
  6. CodeForces 560A,B,C
  7. C/C++继承与派生
  8. C++ 对引用的理解5
  9. 贪心算法-区间选点问题-种树
  10. 【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)