zoukankan      html  css  js  c++  java
  • 第八课、泛型编程简介

    一、数据结构的特点

    1、专注于数据元素之间的关系

    2、专注于特定结构之上的算法(如针对数组结构我们可以设计排序算法等等)

    注:数据结构课程并不关心数据元素的具体类型

    二、为学习数据结构选择合适的语言

    1、由于数据结构并不关心具体的数据类型,故支持泛型编程的语言最适合和数据结构课程的学习

    三、泛型编程的概念

    1、不考虑具体数据类型的编程方式

    void Swap(T& a, T& b)
    {
        T t=a;
        a=b;
        b=t;
    }
    Swap算法中的T并不是一个具体的数据类型,而是泛指任意的数据类型

    2、c++中的函数模板

    (1)、是一种特殊的函数,可以用不同的类型进行调用
    (2)、看起来和普通的函数很类似,两者的区别就是函数模板可参数化
    template <typename T>//template 告诉编译器开始泛型编程,typename T告诉编译器T是一个泛指类型
    void Swap(T& a, T& b)
    {
        T t=a;
        a=b;
        b=t;
    }

    函数模板的调用方式:

    自动类型推导调用

    int a = 1;
    int b = 2;
    Swap (a,b);//自动推导

    具体类型显示调用

    float c = 0.01;
    float d = 0.02;
    Swap<float>(c, d);//显示调用

    3、c++中的类模板

    (1)、以相同的方式处理不同的类型

    (2)、在类声明前使用template进行标识

    (3)、<typename T>用来说明类中使用的泛指类型T

    template <typename T>
    class Test
    {
    public:
        T  Add(T  a, T b);
    };

    类模板的使用方式

    (1)、只能显示指定具体类型,无法自动推导

    (2)、定义对象就指定具体的类型

    Test<int> t1;//定义对象时就显示指定类型
    int ret  = t1.Add(3, 5); //进行两个int类型数据的相加

    四、小结

    (1)、模板是泛型编程理论在c++中的实现

    (2)、函数模板支持参数的自动推导和显示指定

    (3)、类模板在使用时只能显示指定类型

    (4)、类模板非常适用于编写数据结构相关的代码

  • 相关阅读:
    Android音视频学习第7章:使用OpenSL ES进行音频解码
    使用cordova+Ionic+AngularJs进行Hybird App开发的环境搭建手冊
    简单脱壳教程笔记(8)---手脱EZIP壳
    linux CentOS安装telnet
    【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据
    C# 爬取网页上的数据
    ML(1): 入门理论
    ES(6): access elasticsearch via curl
    ES(5): ES Cluster modules settings
    ES(4): ES Cluster Security Settings
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6815964.html
Copyright © 2011-2022 走看看