C++ 模板的用法
C++中的高阶手法就会用到泛型编程,主要有函数模板, 在程序中使用模板的好处就是在定义时不需要指定具体的参数类型,而在使用时确可以匹配其它任意类型, 定义格式如下
template <class T>
T func(T ...)
{
}
让我们来看一个简单例子,写一个swap()将两个整数交换位置,
void swap(int &a, int &b)
{
int tmp;
tmp = a;
a = b;
b = a;
return ;
}
如果我们要将两个浮点型数交换,上面那个swap()肯定不适用,因此为我们还得写如下一个交换函数
void swap(float &a, float &b)
{
float tmp;
tmp = a;
a = b;
b = a;
return ;
}
很显然, 上面两段代码除了参数类型不一样,其它的处理方式完全一样,是不是感觉代码的复用性很差,如果我们要交换两个long类型的数呢,没办法,你不得再写一个上面那样的swap(). 还好C++足够智能,它早就为我们提供了一种更灵活的方法来解决上面这种问题,那就是模板。如果引入模板,上述代码可以由下面一断代替
template <class T>
void swap(T &a, T &b) //T 可由任意类型代替,从而达到泛型效果
{
T tmp;
tmp = a;
a = b;
b = a;
return ;
}
主函数
int main()
{
int a=, b =;
long l1=, l2 = ;
float f1=234.53, f2 = 34.552;
swap(a,b); // compiler auto generate a void swap(int &, int &)
swap(l1,l2);
swap(f1,f2); //一个函数可以处理三种类型的参数,这就是模板的魅力
return ;
}
注意, 模板可以同时定义多个参数,如
template <class T1, class T2, ....>
T1 func(T2, ...)
{
}
C++ 模板的用法的更多相关文章
- Django中模板的用法简介
1. 模板系统的介绍 Django作为一个Web框架,其模板所需的HTML输出静态部分以及动态内容插入 模板由HTML代码和逻辑控制代码构成 Django框架的模板语言的语法格式: {{var_nam ...
- Thymeleaf 模板引擎用法
学习.改良.极致 博客园 首页 新随笔 联系 管理 订阅 随笔- 31 文章- 0 评论- 50 Thymeleaf 常用属性 文章主目录 th:action th:each th:fiel ...
- c++ 中pair类模板的用法详解
pair: 头文件:#include<utility> 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类 ...
- django入门之模板的用法
1.为什么要使用模板? 看下以前的代码 #-*- coding:utf-8 -*- from django.shortcuts import render from django.http impor ...
- c++转载系列 std::vector模板库用法介绍
来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...
- jquery.tmpl.js 模板引擎用法
1.0 引入: <script src="/js/jquery.tmpl.min.js"></script> 2.0 模板: <script type ...
- Laravel框架中Blade模板的用法
1. 继承.片段.占位.组件.插槽 1.1 继承 1.定义父模板 Laravel/resources/views/base.blade.php 2.子模板继承 @extends('base') 1.2 ...
- js模板引擎用法
JavaScript模板引擎Template.js使用详解 作者:A_山水子农 字体:[增加 减小] 类型:转载 时间:2016-12-15我要评论 这篇文章主要为大家详细介绍了JavaScript模 ...
- [HTML] 模板的用法
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...
随机推荐
- [清华集训2017]无限之环(infinityloop)
description 题面 solution 一开始的思路是插头\(DP\),然而复杂度太高 考虑将网格图黑白染色后跑费用流 流量为接口数,费用为操作次数 把一个方格拆成五个点,如何连边请自行脑补 ...
- BZOJ5300:[CQOI2018]九连环——题解
一种打表的方法,适用于知道如何解九连环的人. 我们知道,解九(n)连环必须先解第九(n)环,然后解八(n-1).七(n-2)-- 根据这个我们飞快的写出了一个递推式,设\(f[i]\)为\(i\)连环 ...
- bzoj2216: [Poi2011]Lightning Conductor(分治决策单调性优化)
每个pi要求 这个只需要正反DP(?)一次就行了,可以发现这个是有决策单调性的,用分治优化 #include<iostream> #include<cstring> #incl ...
- GoLand安装配置
目录 下载 安装 破解 运行 参考网址 GoLand配置 下载 1 下载路径:https://pan.baidu.com/s/1JJ-Oxx9NkEK-PrwcvLys7Q,提取码:o0e5 2 下载 ...
- mysql语句进阶
1.null mysql> create table worker(id int not null,name varchar(8) not null,pass varchar(20) not n ...
- UVA10462:Is There A Second Way Left? (判断次小生成树)
Is There A Second Way Left? Description: Nasa, being the most talented programmer of his time, can’t ...
- HDU3308 线段树(区间合并)
LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU1569 最大流(最大点权独立集)
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- array_value
<?php $a=array("Name"=>"Bill","Age"=>"60","Cou ...
- 网络编程:I/O模型
I/O模型 Unix下可用的5种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select和poll,epoll) 信号驱动式I/O 异步I/O(POSIX的aio_系列函数) 一个输入操 ...