您现在的位置是:首页 > 正文

C++模板-29-什么是模板和一个简单的例子

2024-01-30 23:52:24阅读 0

这篇开始进入模板的学习,接下来要学习模板,各种函数模板和类模板,然后学习几个标准的类,例如string类的,然后过度到学习各种容器。

 

1.什么是模板

模板就是建立通用模具,大大提高代码复用性。

 

2.没有模板是什么样的

例如,我们来做这个小练习,交换两个数的值,例如有两个int类型交换,两个float类型交换。由于前面的知识,代码大概是这样去写。

#include <iostream>
using namespace std;

void SwapInt(int &a, int &b)
{
    int tem = a;
    a = b;
    b = tem;
}

void SwapFloat(float &c, float &d)
{
    float tem = c;
    c = d;
    d = tem;
}

void test01()
{
    int a = 10;
    int b = 20;
    SwapInt(a, b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;

    float c = 1.1;
    float d = 2.2;
    SwapFloat(c, d);
    cout << "c= " << c << endl;
    cout << "d= " << d << endl;

}

int main()
{
    test01();
    system("pause");
    return 0;
}

注意上面交换传的参数是引用,不是具体的数值。

测试运行结果

结果肯定没有问题,两个数交换过来了。如果我们要继续交换两个字符,或者double类型,或者两个字符串,那么我们还需要写很多重复的代码。

 

3.模板简化了代码

下面用模板的思想来优化代码

#include <iostream>
using namespace std;

template <typename T>
void Swap(T &a, T &b)
{
    T tem = a;
    a = b;
    b = tem;
}


void test01()
{
    int a = 10;
    int b = 20;
    Swap(a, b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;

    float c = 1.1;
    float d = 2.2;
    Swap(c, d);
    cout << "c= " << c << endl;
    cout << "d= " << d << endl;

}

int main()
{
    test01();
    system("pause");
    return 0;
}

重点就在Swap()方法中,在方法定义上面一行,template <typename T>, 这是固定写法,其中template 和typename是关键字,T可以随便写成其他字母,一般习惯T表示模板的首字母。

运行结果一样,都产生了交换。写一个方法,可以适应全部类型的两个相同类型参数的值进行交换。这是一个函数模板。

网站文章

  • 基于redis+lua实现抢红包业务(java实现附代码)

    基于redis+lua实现抢红包业务(java实现附代码)

    抢红包的关键 我认为在抢红包业务里面,主要有以下几个关键问题: 1、多个人同时抢一个红包存在的数据竞争问题(并发问题) 2、判断一个人是否已抢过该红包 (可见性问题) 3、拼手气红包的分配算法 4、红...

    2024-01-30 23:52:17
  • 技术分享 | 关于 MySQL 自增 ID 的事儿

    作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 当我们使用 M...

    2024-01-30 23:52:10
  • Ansible自动化运维之常用模块的ad-hoc应用

    Ansible自动化运维之常用模块的ad-hoc应用

    文章目录1. yum模块2. service模块3. firewalld模块4. copy模块5. uri模块6. file模块7. user模块8. mysql_db模块9. mysql_user模块Ansible中的内置模块非常的多,一般使用ansible-doc来获取模块相关帮助; 可以直接查看doc帮助文档尾部 的example例子 仿照应用ansible默认模块为comma...

    2024-01-30 23:51:42
  • 计算机实现加减乘除 ----- 二进制

    二进制四则运算

    2024-01-30 23:51:35
  • ARM v8 简介

    ARM v8 简介

    ARMv8 Registers General Purpose Registers ARMv8提供了31个64-bit的通用寄存器。分别是X0-X30。 每个64-bit的寄存器低32位又包含32-b...

    2024-01-30 23:51:28
  • CTF相关之代码py报错 from secret import FLAG ImportError: cannot import name ‘FLAG‘ from ‘secret‘

    CTF相关之代码py报错 from secret import FLAG ImportError: cannot import name ‘FLAG‘ from ‘secret‘

    运行python代码时报错: from secret import FLAG ImportError: cannot import name &#39;FLAG&#39; from &#39;secret&#39; (D:\python.10\lib\site-packages\secret\__init__.py)

    2024-01-30 23:50:58
  • struct device中消失的bus_id的取代方法

    <br />编写总线设备驱动程序的时候,发现2.6.33.2内核中的struct device已经没有bus_id的成员了,发现了const char *init_name成员。但是,这个成员是不能直...

    2024-01-30 23:50:51
  • 计算机越学越抽象,大学学的软件工程专业,现在发现很难,也不能转专业,该怎么办?...

    软件工程专业是最近几年就业情况非常好的专业之一,所以如果从就业的角度出发,软件工程专业是一个非常不错的选择。下面我简单的分析一下软件工程专业,然后针对可能出现的学习难点做一个剖析,再给出一个学习建议,...

    2024-01-30 23:50:47
  • 面试必答题“聊聊Java中线程的生命周期状态”如何破?

    面试必答题“聊聊Java中线程的生命周期状态”如何破?

    “聊聊Java中线程的生命周期状态吧!”这几乎是一道面试必答题,这道题怎么答才是最佳答案呢?本文就带大家来破解一下!01一张图说明线程生命周期JVM源码中将线程的生命周期分为新建(New)、可运行(R...

    2024-01-30 23:50:40
  • C语言,环形队列

    C语言,环形队列

    什么是环形队列?环形缓冲区是一个非常典型的数据结构,这种数据结构符合生产者,消费者模型,可以理解它是一个水坑,生产者不断的往里面灌水,消费者就不断的从里面取出水。那就可能...

    2024-01-30 23:50:11