00:00
好,我们继续来上课,那么上节课呢,我们介绍了我们的匿名函数啊,以及我们的匿名回调,对吧,那么现在呢,我们再来看一下我们函数的最后。一部分啊,叫什么可变长度参数列表,其它不属于最后一部分,最后一部分应该什么,应该是我们文件的包含啊,那么这节课呢,我们再来看一下我们可变长度参数列表啊,那么可变长度参数列表什么意思呢?咱们来看啊,在这里边啊。比如说我有个需求,什么需求呢?我想做一个累加和函数啊,来21。叫做。数。我们要讲解的是可变。长度参数列表啊。那来咱们来看啊,比如说我想求想写一个什么呢?求一个这个聚合函数。啊,也就是说UC方程之前我们肯定是这么写,比如说这个sum括号,然后呢,你要给我一个数,再给我个数,对吧,然后这里边我来干嘛呢?Return return谁啊到了noe家长到了。
01:07
哎,怎么回事?加上一个刀二是不是这样的,哎,然后呢,你在调用的时候,比如说你这里面传了一个一,传了一个二,那么我在这块,比如在这块直接输出了艾,艾完以后它的结果多少是不是就三了。那你看结果是不是三,对不对,哎,但是有个问题咱说了这叫聚合函数,我这里面传多少个数,你是不是都要给我。求出它的累加和,比如说sum,再来我传一二三四五六七八九十。789呢。七八九十,这是不是也是在求累加和函数了,对不对,哎,但是我这么样去调用行吗?来咱们看一下行不行啊,在这里面刷新,刷新完以后没有结果对吧?没报错,首先啊,来我们来个Dollar r接收一下,然后我们就来打印这个Dollar r VR-DP打印Dollar r,咱们来看最终它的结果是几。是不是依然是三对吧,因为什么,因为他会把我第一个十参值赋值给谁啊,是不是把第一个三值赋值给他,把第二个十参值是不是赋值给了他,后面的东西他是不是就不管了,因为没有。
02:12
对不对?哎,注意我们在讲参数的时候,我只说了什么呀,行参值跟实参值要一一对应对吧,但是我们没有说实参的个数不能超越行参的个数啊。没错吧,对不对?哎,所以这里面我的13个数是允许超过行三个数的,那么我怎么能拿到所有的值呢?而且这种需求也是很常见的,你比如说我们再看一个系统函数啊。基函数叫什么A杠?他是干嘛呢,像。系统的末尾啊,插入一个。或。多个单元啊,就多个元素呗,比如说这里边我们定义一个呗,Dollar等于A啊,这里边我们来一个来个什么,来一个容值教育。融资教育对吧?再来一个e Du work好了,这里面有两个元素,那么接下来我想往这个数据里面再插入元素的话,我可以干嘛呢?Ay a push,你要往哪插,我要往这个数组里面插,你要插什么?比如插一个学习原地好了,这个时候我们再来看VR-DP,注意它改变的是原有的数组,你看我这里边一用参数的时候,一写的时候,参数前面是不是有提示啊,是不是给了一个什么and符,给了and符代表什么?它操作的就是原有数组了,那现在我来打印这个VR,那你再来看刷新。
03:31
这里面是不是增加了一个学习选地对吧,那他说了能增加一个,是不是也能增加多个呀,那比如说这里边我再来增加啊,看好了,这回我不增加学习原力了,增加谁呢?增加比如说高乐峰。高落风对吧,然后再来,比如说这里边还有孙建奎。孙建奎啊,然后徐枭雄好了,比如说把这三个人占,这是不是一次性插入多个了对不对,你要他说的就是插入一个或多个单元,那一旦多个流,你知道用户要传多少个13吗?不知道,就像我这道题是你知道我要传多少个13吗?不知道,只要我加进来了,你是不是得给我计算它的和啊,对不对,但是现在你看他可不可以做到插入多个元素啊,再来刷新。
04:16
他能查进来。插进来了吧,哎,都插进来了以后他一样,他有没有返回值,它也有返回值,它返回什么东西呢?返回新数组的长度。哎,你看VDP打印。到了L1啊,打印这个新数组,那这个时候我们再来刷新,你看是不是拿到六个长度,这里边是不是SIZE6啊,哎,从零到五吧,是不是有六个元素,哎,这就是瑞刚push的功能,可以干嘛呢?在数组的末尾插入一个或者多个单元啊,但现在我这里边呢,我也想插入一个或多个单元,但是呢,实现不了,没错吧,所以在这里边怎么办呢?我可不可以做呢?可以啊,我们可以通过什么?通过一个在函数内部通过什么呢?通过AAR。交流匹配一下。
05:01
这里边叫做什么,叫做这个,呃,AFUNC-A。杠get-AGS啊对,通过它,我们在可以在函数内部通过这个函数来获取传入的所有的时参值。来,我把格式调整一下啊,我记到下面来了,在函数内部使用。使用什么呢?使用这个函数啊,UC-get-AGS获取。传入的所有食材。值啊,它返回什么呀,返回一个速度返回。一个数组,好了,那我们来看一下,比如说FUNC方程,这里面叫做N1对吧,然后同样这里边我什么都不写了,对吧,参数我一个都不写了啊,然后我直接到了AR。等于UNC-get-ags对吧,我获取传输十六十三,当然我写一个行不行,比如说你至少要给我两个数,你要求累加和你是不是至少给我两个数啊,这叫SUM1啊,那OK,那这个时候咱们再来看啊,调用sum。
06:01
一传入一二三四五六七八九十,是不是传入十个数对吧?那这个时候我们来一样啊,在这里边我调研完之后,我要打印的看一下这个到雷啊,你看我是不是获取到了用户传入的所有十参值,是不是返回一个数组传的是不是一到十对吧?下边是不是对应的零到九啊哎,那有了这些数以后,那你看我通过它接收到这些数以后,接下来可以干嘛,我是不是就可以进行变历了方each遍利Dollar了a is一个Dollar了V对吧?那求累加和的话,是不是这里边我就到了totl等于一个零。对吧,然后呢,这里边到了tutl加等于Dollar v吧,哎,最后干嘛,瑞瑞直接到了totl,是不是把这个值返回出去,返回出去以后是不是在这里去接收啊。来接收一下,到了IRP接收完以后,我们在这里边V安杠DOP1到十的累加和多少,是不是55。是55吧,六六十五吧,你看一到九是个十,这又是个十,这又是个十,这又是个十,这就四十四十五加十五十五吧,哎,那你看结果是个55走你。
07:04
结果说55拿到了对吧?哎,这就是咱们的可变参数参数列表,也就是说在我们实际使用的时候。对吧,叫做什么13值。时参值啊,允许超过行参。个数对吧,但是要想获取传入。所有的实参值对吧,需要。在函数。对吧?内部使用什么?使用UNC-get-arts来获取来获取对吧?而且这个家伙只能在什么?只能在函数内部来使用,那咱们来看一下笔记,这里边在函数中实参实际传入个数允许超过形参的个数,那么在此情况下,如果想获取传入的所有的实参,可以使用什么?使用函数FUC-get-ARGS来获取什么呀,所有实参值组成的数组,那么在函数内部进行什么进行其他的操作啊,而且这个家伙只能在函数内部使用啊,那好了,那咱们就来看,那既然我们现在会获取这个参数了,那我们能不能自已来模拟这个功能呢?
08:15
来看好了,在这里边。自定义A的功能对吧,像数组的。末尾对吧,插入一个或者多个。单元啊,至少是一个对吧,那这个功能有什么特点,我们是不得分析一下,咱们说了函数就三点作用,我们知道了,那参数呢。IPM参数第一个参数是不是数组对吧,要。插入。数据的数组对吧,第二个参数呢,P'M。第二个。
09:01
第二个参数,第二个参数什么呀,是不是一个或者多个单元,但是你至少是不是要有一个。没错吧,哎,然后返回值是什么呀。返回re to return re return return,什么新数组的长度吧,是不是这样的?那也就是说在这里边你看好了,我们自己来定义function叫做。My god。Push对吧,第一个你要是以引用的方式传一个对吧,因为这里边它的功能是干啥改变原有。原有数组改变原有数组对吧,所以我是以引用方式要传一个,然后呢,至少要给我一个值对吧,至少一个好了,这是不是就是我的基本功能啊,然后在这个里边干嘛呢?我是不是要系数组的长度对不对,也就是我这里边,比如说我看看到谁count到了AR。这个结果啊,我是不是给他顺出去。对吧,然后在这里面干嘛呢,我是不是得第一件事儿,我要先获取。
10:02
传所有。传入的实参。值啊,是不是这样的,那怎么获取直接for it错了,怎么for意直接到了AGS了,等于什么func-get-AGS是不是先获取啊,获取过来以后来VR-DP咱们再来看啊,打印ARGS好了,我还有上面的数组啊。来,我们把这两个数组拿过来。就这。拿到我们下面来看好了,我这里边先是定义了数组,对吧,定义完数组以后,我是不是向数组里面去插入数据,这个咱就不要了啊,这块呢,不叫A-push咱们自己定义是是叫MY好了,调MY好了,当我调用完以后,这个时候我们再来看啊,我这里面来刷新,刷新完以后你看我的ARGS这个数组在我的第四十五行打印的,四十五行是不是这里四十五行打印,哎呀,既然是什么,是不是包含了我原有的这个数组啊,对吧?剩下是不是我要插入这三个值,那么跟这个零没关系,剩下的123是不是都是我要插入的。对不对,那也就是说。在我这里边,我既然已经拿到这个数组了,接下来干嘛,我是不是就包。
11:04
意识来便利ARGS,对吧?咱们便利的S是Dollar k指向的Dollar v,那么当它为零的时候,注意当Dollar k为零的时候,也就是说在这里面的零下标,我需要去把它强大数轴当中吗?不需要吧,哎,所以说在这里边干嘛呢,过滤。要零下标的。要零下标的内容对吧,为什么因为零下标。的内容是什么?是元素组内容,是元素组的内容吧,所以在这里边,也就是如果Dollar k不等于零的时候,我是不是才开始啊,干嘛直接到了AR中国号里的到V是不是就可以了。对不对,哎,因为我通过中括号方式不只能下标,那它的下标是不是当前数组中最大值加一对不对,那现在我再返回新数组的长度不就搞定了吗?这个数组因为是引用传过来的,它在我的函数内部发生改变,对应的外部的是不是也是改变的,那现在你看我的功能跟它是不是就一样了,再来刷新来拿没拿到。
12:08
在我的第58行打印的第58行是不是这里头,那同样我们再来打印谁啊,再来打印这个len来,你看我是不是也能添加进来了。返回五。对吧,哎,这里边跟上面的为什么少一个,因为我之前单独加了一个学习园地啊,对不对,那也就是在这里边,比如说我还是一样,我再单独加个学习园地,你看是不是也是支持的。看到了吗?返回是不是就六啊,哎,那这样的话,我是不是就通过自己定义的方式实现了我们系统这个函数的功能,对不对那一样,比如说这里面下标要是不不是关联的呢,比如在这里边啊。我们来一个,我们先看系统的来,我们找到上面来。上面的哪在这,这是系统的对吧,那比如说这里边啊,这里面下面不是关联的,咱们来看这里边我给他一个。二。对吧。然后呢,或者这个我不给name了啊,我给他。
13:01
我给第二个啊,这个叫什么叫做KY,好了,那咱们来看啊,这里边是不是就有一个关联数组,这是一个混合的,它的是索引的对吧,它的下边是零吧?来我们先看一下默认的VR-dump UMP打印dollarr,我们看第14行的打印结果啊,Dollar a来。再来看找你看14行打印结果是不是一个零一个K啊对不对,那么再看17行了,17行往里面添加的时候依然0K保持了,剩下的是不是就1234了。看到了吗?但是长度拿的时候一元值六吧,那我如果这样行不行呢?咱们来看啊,比如说在我们的这个定义的这里边一样,我们把谁呀,把这个。他。对吧,指向指向前面加一个什么,加一个内。等于M1,好,你看它是不是也是这样的,在这里边再来刷新,刷新完以后你看name依然是1WORK对吧,下面是不是就1234了,是不是当前始终都是当前数中最大下标值加一。对不对,哎,那OK,这就是咱们什么,咱们去模拟的这个系统函数A-push的功能啊,所以呢,大家下来以后啊,这里面我用a put添加的是吧,我换我依然用MY添加就可以了,对吧,那这里边再来刷新。
14:10
啊,是不是没有任何变化,是不是也一样实现了,对不对,哎,这就是咱们去使用这个什么可变长度参数列表来去实现的这个功能啊那么一样,咱们今天呢,也会有两个作业干嘛呢?一样是你去模拟模拟系统函数。你看啊,我带着大家去写过两个函数了,一个叫A瑞杠跑跑对吧,三组数组中最后一个元素,那么还有一个叫什么呢?还有一个A瑞杠push,这是像数组,你看将一个或多个元素压入数组的末尾,对吧?那么同样也有什么呢?也有这个叫shcon shift干嘛呢?你看将宿组开头的单元移除,这个我们需要干嘛呢?需要大家下来自己去定义啊,用这个函数怎么用,我给大家演示一下啊,然后呢,还有一个东西叫什么A-unft。那你看干嘛在数组开头插入一个或多个单元吧,哎,能像末尾插入一个或多个,那也能像开头去插入啊,那在这里边我直接新建一个给大家在这里面直接演示了啊,新建一个这个PP文件叫做22啊,叫做关于作业,嗯。
15:13
Homework。Work homework啊,这里面我们要介绍的是关于作业的内容,关于作业我们需要是干嘛,是不是自定义这两个函数对吧,自定义。函数。叫什么呀,叫做这个。删除。数组中第一个元素的功能。啊,然后再来还要自定义什么自定义函数三不是三组,是在数组的开头插入一个或者多个单元吧,那比如说我们先把数组拿到啊,比如说这里边Dollar a。等于AR ay啊然这里边ABC好了有四个元素,那么接下来我们使用系统函数叫做ay杠瑞杠shift把到R丢进来,丢进来以后它改变的是原有数据,返回什么,返回一个内容对吧,比如说返回一个VALUE6吧啊然后在这块我们来打印,打先打印第六行,我打印的是什么?打印的是元素组啊,打印到了arr,然后第七行呢,我来打印。
16:21
VL。那现在我们来看。诶,你看是不是把A删掉,A拿过来了对不对,剩下的内容是不是零到一又重新排列了,哎,所以你要跟他模仿的一模一样才可以啊,要一模一样才可以,好然这是它删除的功能,那同样添加呢,比如这里面do AR等于A啊这里边有A有B。啊,有C,好了,我听下这三个元素啊,AR ay啊。然后。在这里面开始添加啊,高的Le等于A杠杠什么unt,我要在这个数组里边添加什么呀?添加一个。
17:05
我很好,好了我添加了四个是吧,那现在我们先来看啊,打印一下这个DOL音。这个时候再来刷新,你看拉的是七对吧,哎,我没有打印元素组是吧?来再来打一下元素组到了A。到了A,我们再看一下元素组,再来刷新元素组多少,你看是不是都进来了,但是如果这里边一旦要有一个。关联的呢,比如说咱们来看啊。来个什么呢?来个name,我的name是指向了B对吧,那这个时候你看好了,Name指向了B,那下标就会有问题了,看好了啊,因为我是往上插入对不对,再来刷新你看。是不01234,然后name,然后五看到了吧,哎,所以你在做时候下标也要是正确的,是不是才可以,对不对,哎,那OK,这就是咱们系统中提供的这两个功能,那么你再去做的时候,你要模拟,你在模拟的时候不允许这么去写,比如说我要写一个MY-SH,呃,Unftt对吧,Iftt括号对吧,一样,你要这里边给我传一个数组。
18:12
并且传一个数组,再给我传一个值对吧,然后呢,在这里边我直接干嘛呀,直接ret return,不允许这么去写啊,到里边,比如到到R里边,到VR里边啊,作业中不允许使用这个方式啊,作业中。不允许使用。该方式。啊,你必须按照我给大家写那种方式去写明白吧,哎,这就是咱们这个作业的要求啊,好了,那这节课就到这里。
我来说两句