C++模板函数06

------------------------------------------------------------------------

空指针:

野指针:

------------------------------------------------------------------------

一、温故知新

        运算符重载

                本质上就是函数的重载

        语法

                返回值 operator 运算符(参数列表)

                {

                        函数主体

                }    

        作用

                定义类可以进行其所支持的运算符的运算

        不支持重载的运算符

                sizeof

                ::

                ? :

                .

                #

                ## 

        形式

                作为类的成员函数出现

                []

                ()

                =

                ->

                全局函数,作为类的友元函数

                <<

                >>

        因为输入输出运算是istream和ostream类的成员函数,我们没有办法去改变,所以需要作为类的友元函数来实现。

        注意:

        1、不能改变运算符的运算规则

        2、不能改变运算符的优先级

二、模板(Template)

        1、简介

                模板是为了泛型编程,泛型编程是一种使用模板来编写程序的方式,可以让程序员编写与具体数据类型无关的代码,这种方式可以最大限度地提高代码的复用性和灵活性。

                泛型编程理解为广泛类型

                函数的参数可以在函数调用的时候指定,函数在当以的时候参数是通用的

        2、回顾C

                在C语言中实现一个能够适配任意类型的数组的排序(要求排序算法无所谓,但一定是任意类型的数据都可以排序)

函数名:sort
参数:arr数组起始地址(由于是任意类型,所以使用void *)
nmemb数组成员个数
size一个成员的大小
cmp函数指针,指向调用者提供的比较函数(只有在调用的时候才能确定比较双方的类型)
返回值:
void sort (void *arr, int nmemb, size_t size, int (*cmp)(const void*, const void*));

        3、C++实现通用函数

                template <typename T>

                void swap2num(T& t1, T& t2)

               这种方式叫做模板函数,也就是参数类型在函数定义的时候是通用的,在函数调用的时候才确定的数据类型。

                使用C++的方式实现更方便一些。

        4、模板函数

                利用模板函数,我们可以在相同的代码中指定不同类型的参数执行该功能

                1)定义形式

                    模板函数定义的形式:

                        template <typename type>

                        函数返回值类型 函数名(参数列表)

                        {

                                函数的主体        

                        }

                        // 也可以写成

                        template <class type>

                        {

                                函数的主体

                        }

四、类的模板

        1、简介

                类的成员变量类型,在实例化对象的时候才能确定

        2、例子

                定义一个坐标类Point

                我们在表述这个坐标类的属性的时候可以使用

                【1】整形的                                [100,200]

                【2】浮点型的                            [1.2, 3.4]

                【3】经纬度坐标(字符串)           ["北纬39°", "东经116°"]

----------------------------------------------------------------------------

本初子午线(0度经线)为分界线,往东(右)为东经,往西(左)为西经,递增,一直递增到180°相遇。

南北纬以赤道为界,从赤道到北极部分为北纬,到南极部分为南纬。

----------------------------------------------------------------------------     

                我们对于这个坐标类有3种不同的类型:

                        【1】整型【2】浮点型【3】字符串

                所以我们在创建坐标这个类的时候不能确定各这个类的成员变量具体是什么类型的

                只能在实例化对象的时候确定成员变量是什么类型。

        注意:在使用模板库的时候,我们不需要创建.cpp文件,因为模板类的成员函数要求必须和模板类在同一个文件中进行定义,也就是说,我们单独在一个文件中实现模板类的成员函数是编译不过去的。

五、数据结构

        1、数据结构的分类

                数据结构分为逻辑结构和物理结构

                【1】逻辑结构:指数据元素之间的逻辑关系

                【2】物理存储结构:指数据在存储空间中的存放形式

        2、数据的逻辑结构

                【1】集合结构:集合中任何两个元素之间都没有逻辑关系

                【2】线性结构:指的是元素与元素之间存在“一对一”的关系

                【3】树状结构:指的是元素与元素之间存在“一对多”的关系

                【4】图形结构:指的是元素与元素之间存在“多对多”的关系

            在C++中对于我们常见的数据结构,都有标准的类,这个类都是模板类。

            其中线性结构是我们最熟悉的,比如:

                [1]数组(顺序表)

                [2]链表(单双、是否循环、有头无头)

                [3]树状结构

                        二叉树、满二叉树、完全二叉树、平衡二叉树、红黑树

        3、特殊的存储结构

                [1]栈式存储结构(先进后出)

                [2]队列式存储结构(先进先出)

        4、构建双向链表

                1)成员变量

                        【1】指向前驱节点的指针

                        【2】指向后继节点的指针

                        【3】数据域

                2)成员函数

                        【1】构造函数

                        【2】析构函数

                        【3】头插法

                        【4】尾插法

                        【5】遍历

                        【6】查找

                        【7】删除指定元素

                        【8】修改

                        【9】反转

                        【10】排序

template <typename T>
class ListNode
{
    public : 
        ListNode<T>* prev;
        ListNode<T>* next;
        T _data;

    public :
        ListNode(const T& data) : _data(data), _prev(nullptr), _next(nullptr) {};

};

 六、任务

        1、通信方式

                有线通信        

                        以太网

                        RS232和RS485(工业领域中常用的总线)

                        TTL                0V 0                3.3V  1

                        RS232           3V~12V 0        -12V~-3V 1

                        RS485

                        PLC(电力线通信)

                无线通信

                        短距离无线通信

                                蓝牙

                                WIFI

                                zigbee

                        蜂窝移动网络

                                3G

                                4G

                                5G

                        低功耗广域网络

                                NB-IoT

                                Lora

                        ModBus协议

                                

                           

                                        

                                            

                  

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
[入门数据分析的第一堂课]这是一门为数据分析小白量身打造的课程,你从网络或者公众号收集到很多关于数据分析的知识,但是它们零散不成体系,所以第一堂课首要目标是为你介绍:Ø  什么是数据分析-知其然才知其所以然Ø  为什么要学数据分析-有目标才有动力Ø  数据分析的学习路线-有方向走得更快Ø  数据分析的模型-分析之道,快速形成分析思路Ø  应用案例及场景-分析之术,掌握分析方法[哪些同学适合学习这门课程]想要转行做数据分析师的,零基础亦可工作中需要数据分析技能的,例如运营、产品等对数据分析感兴趣,想要更多了解的[你的收获]n  会为你介绍数据分析的基本情况,为你展现数据分析的全貌。让你清楚知道自己该如何在数据分析地图上行走n  会为你介绍数据分析的分析方法和模型。这部分是讲数据分析的道,只有学会底层逻辑,能够在面对问题时有自己的想法,才能够下一步采取行动n  会为你介绍数据分析的数据处理和常用分析方法。这篇是讲数据分析的术,先有道,后而用术来实现你的想法,得出最终的结论。n  会为你介绍数据分析的应用。学到这里,你对数据分析已经有了初步的认识,并通过一些案例为你展现真实的应用。[专享增值服务]1:一对一答疑         关于课程问题可以通过微信直接询问老师,获得老师的一对一答疑2:转行问题解答         在转行的过程中的相关问题都可以询问老师,可获得一对一咨询机会3:打包资料分享         15本数据分析相关的电子书,一次获得终身学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值