斯坦福-CS106A-B-L-X-编程入门笔记-七-
斯坦福 CS106A/B/L/X 编程入门笔记(七)
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P22:【Lecture 22】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
很酷,对不起视频中的人,但是基本上我们只是在聊,关于重新哈希,所以对我们为什么要重新哈希还是有任何疑问,某种算法可以做到这一点,或者您准备好开始编码了吗? ,因此负载系数只是一个数字,代表平均长度。
哈希图中的链接列表,因此哈希表中的元素数,除以正确的铲斗数量,得出的是坚果平均数量,每个存储桶中的元素,我们希望该平均值较小,以便您,不必像一个很大的链表一样进行迭代,因为我们想要。
我们试图获得一个恒定的运行时,所以我们希望这些,希望这些链接列表平均很小,例如只有几个,元素是的,所以问题是元素总数或,每个索引中的元素通常我们使用元素总数是因为,因此,我们假设我们将稍作讨论。
但是我们认为,散列函数很好地将元素分布在所有,桶,所以我们假设我们的哈希,函数只会将所有内容放到存储桶0中,因此非常安全,假设您在所有存储桶中都拥有相同的数字, ,可能会有些问题。
而不会提出一些很好的问题。
好吧,让我们谈谈如何实现重新哈希,好吧,我包括了一些,刚刚遍历哈希的入门代码,一般而言,当我们想要增加数组或将其加倍时,可以正确映射,因为那是一个容易获得的数字,所以好节点等于哈希表,我们。
有点想复制所有这些东西,以便我们将来拥有它,因此,如果您有能力,那么我们想创建一个新的哈希表,那么该怎么做,我们这样做,是的,他们确实记得那种哈希表的样子,表类型是它是指向哈希节点的哈希指针的数组。
好吧,那我们就要投入产能,因为我们想要那么多的水桶和,你把括号括起来,所以一切最终都为空,好了,现在好了,在这里,所以在这里,好了,我们有当前元素要放入。
我们新的哈希表我们如何知道您应该将哪个存储桶放入,是的,所以我们喜欢我们必须获取哈希值,然后修改我们的,容量,所以我们可以调用哈希码,说得好,所以哈希等于,曲线数据还可以。
所以我们想把它放在哈希表的最前面,增加人们对星期五的记忆,只是更多的回头,星期二的哈希表示她的下一个等于完全哈希表的灰分, ,那么我们会说哈希表hash等于正确,因此将其插入到,我们的存储桶还可以。
所以现在我们要转到旧哈希表中的下一个元素,所以通常会喜欢她的等值曲线,但是接下来是什么,问题是这样做的,对不起,我没有,所以可能是因为没有,下一个,但是我们可以在这里赶上它,当前X的值是多少。
这是我们做的,是的,所以我们基本上像其他人一样迷路了,原始列表,因此我们必须确保将其保存下来,然后再向下保存,在这里,我们可以说咖喱等于下一件我们要做的事情,在这个功能,他们不是记忆。
还是我们正在做我们需要做的一切,记忆或我们所有的变量都正确,是的,基本上每次您都正确,打电话给新的你想有一个相应的删除确实说删除旧,很好,所以我们可以尝试运行此,好吧好吧。
所以我们可以添加添加仍在工作好吧,我们的负载系数越来越大,右上角有很长的链表,所以我们实际上不是,在您认为应该在任何地方调用rehash的地方,是的,是的,因此,您始终希望在添加方法的末尾进行检查。
以确保您,并不是说您不需要重新哈希,所以我们有一个有用的功能,负载系数,所以我们可以说如果这大于最大负载系数,那么我们,想重新整理好吧好吧,好吧,现在我们跳到两倍大小,我们有,将所有元素移到上方。
继续执行该操作,然后我们再次跳过,你有关于重新哈希的问题吗,是的,所以问题是为什么我们为什么要如此频繁地重新哈希,首先,我开始时只用了很少的水桶,所以这是一个,我这样做是有点卑鄙的。
只是为了让我们看到重新哈希发生了,多次,但是我想你的问题是为什么我们选择这样,元素数量少,那是因为您甚至想要知道,最大的存储桶中仍包含少量元素,因此您可以,想想如果只是为了不使用哈希函数而是随机分配。
像桶号这样的数字对您所有的元素,您都会有一些,桶会比其他桶更长,所以您甚至想要更长的桶,这种上限只有几个元素,所以这就是为什么,我们选择如此小的负载系数,另一个答案是,重要的是包含比添加的几率快的权利。
这仍然像是矢量,您将尺寸加倍,它不是那么昂贵,因为您没有这样做,经常有多种原因,是的,问题是当您寻找优先队列时,我们在数组上用方括号调用了delete,这很好,但是,当我们拥有链表优先级队列时。
您实际上删除了所有,希望这些节点对任何人都不会感到惊讶,然后为什么呢? ,我们只是在这里删除数组,而不是像这样去,通过并删除所有链接节点,因此,如果您实际上正在尝试,删除整个结构,您将必须删除节点。
但是这些节点,仍然存在于我们的新哈希表中,因此我们不想删除节点,因为,我们仍然想要相同的元素,而我们的新元素在更大的哈希中,表,这就是为什么我们不这样做,更好的问题是为什么我们不这样做,在这里做这件事。
我认为这是因为Marty尚未做到这一点,星期五讲课的入门代码,我认为Marty只是想让他,请注意,您应该执行此操作,因此扩展该操作非常容易,并且,如果您在现实生活中实现这一点,绝对是一件好事,是的。
在后面的路上很棒,所以问题是为什么会有这个,哈希图中元素数量的区别,然后,哈希图中的存储桶数,因此您需要知道存储桶数,因为它在哈希码函数中使用,它会返回哈希,由存储桶的数量修改。
然后您需要知道元素的数量,如果您想进行尺寸调整或类似的操作,则需要,桶的数量告诉你真的很重要,因为它告诉你,在数组中查找的位置以及元素的数量更多是一个,该特定集合的属性确实有意义,是的,桶是完全是索引。
是的,是的,所以它也有点像,您对向量PQ或RAID PQ的大小和容量有多大的了解,或幻灯片还可以,这里,你懂,是的,所以您是对的,哈希表中的所有内容都是空指针,但是,从旧桌子上弯下来。
我们有点遍历旧桌子,桌子,所以旧桌子不应该把所有这些都关掉,所以,时间的利益,如果还有更多的问题,你为什么不出来聊天,给我下课后,但只是为了确保您了解所有材料,但。
这些真的是很好的问题,所以您可能想知道这是一个哈希集,我们如何处理哈希图,与BST讲座非常相似,我们讨论了如何使用BST ,首先在BST中为地图设置一个,这样您就可以知道自己想要一个,更改哈希节点。
使其必须具有键和值字段,而不是,就是那个数据字段,因为您需要存储两条信息,然后的想法是,一些函数名称有点,就像您必须实现一个contains函数一样,所以您,仍然有包含,但是现在包含了键,而不是添加您。
会把yep get返回值,所以你必须搜索,您的密钥的哈希映射,然后从该节点获取值,但通常,非常相似的最大区别之一是,当您放置,您必须检查其中是否有东西已经在您的哈希图中,并且。
不像之前或当我们在集合中添加一些东西时,我们只是知道,忽略了重复添加,如果需要,我们将不得不实际更改值,已经有那个钥匙,例如,如果我们要让您知道这一点,值并将其更改为清晰。
然后我们将在这里摆脱Marty ,像这样用克里斯代替他,是的,这个问题很好,所以这导致了一个明显的问题,这是要命名的ID表,例如超级有用,可能有用但,如果您想将名称命名为ID或类似名称,那我们该谈谈。
也许我们可以灰历史,所以用一个整数,这很容易,因为您可以做一些事情,例如,通过哈希表的长度来修改它的值,但要包含一个字符串,并没有像字符串和哈希那样的数字等效,确实需要这个数字,以便您知道要看哪个索引。
所以我,可能会说,如果我只是喜欢随意选择,是的,但是我怎么找到一个数字说他们都是42,所以让我们,谈论什么使一个好的哈希函数,然后我们可以尝试思考,字符串的一些很好的哈希函数,所以哈希的最重要属性。
代码必须保持一致,所以如果您有两件事是相同的,它们需要具有相同的哈希值,所以为什么呢? ,是的,如果要散列,第一次添加元素并将其放入该索引时,然后当您稍后在哈希函数中进行搜索时,返回一个,不同的索引。
那么您将无法在哈希中找到您的元素,桌子,所以你只是会说它不在那儿,即使它是正确的,所以基本上,我们的哈希值在那时将是无用的,还可以警告,这是不一定需要与他们只需要完全相同的对象。
如果在某种平等权利的概念下它是平等的,那么这就是两个,不同的向量,但是到这三行代码的结尾,它们具有,相同的元素,即使有两个独立的向量,如果您将其称为V 1等于V 2则它们将被视为相等。
会返回true的哈希码必须与这些哈希码相同,出于同样的原因,我们想要在任何时候寻找带有,元素1和3可以指向相同的索引,所以为什么我们说一个等于B他们必须具有相同的,哈希码,但如果不等于B,为什么还可以。
相同的哈希码,是的,所以基本上你是正确的,所以基本上在那里,无限多的流对,它们只有40亿个整数,所以,您将必须拥有2个具有相同数字的字符串,因为您不能,就像将无数个字符串唯一地分配给40亿个数字一样。
,你就是这就是为什么我们之前有冲突,并且哈希函数还可以,发生碰撞,因为实际上这是不可避免的,所以我们,刚刚谈到了哈希码必须具有的内容,因为如果没有,这种一致性将无法正常工作,只是您的哈希将无法。
找到您想要的质量的元素,这不是严格的,这是必需的,因为期望的质量是哈希值分布合理,这样您就知道何时进行映射或何时提出哈希,尝试使用所有这40亿个字符串对所有字符串起作用,例如,数字不只是十个。
为什么我们要这个属性,为什么呢? ,这很重要,是的,如果您有,更好的分布式哈希函数,您将在所有,因此,您的链表的实际长度将非常接近,负载因数,我们说我们的负载因数很小,所以可以算出来,很好。
但是如果您有一个分布不均的哈希函数,例如,你知道一个极端的例子,你可能最终会得到一个链表,像是一个包含所有元素的链表,因此大小无关紧要,您的阵列是,您仍然会将所有内容放在同一个存储桶中, 。
那不会是一个运行时的O的酷,所以请保持在,请注意,有效的哈希函数必须具有一致性和良好的哈希,功能必须分布合理且一致,因为,你不可能拥有一个好的但无效的哈希函数,对吧? 。
所有人都认为这个哈希函数有多少人认为这是有效的,很多人认为这是无效的,多少人认为这是有效的,因为当您输入相同的字符串时,您将得到相同的数字,因为每个字符串都给您正确的数字42,所以它会有效。
在正确的存储桶中查找,但是这是一个很好的哈希函数吗? ,人们认为是,多少人认为是,这将是链接列表,例如,这是实现链接列表的一种非常困难的方法,对,所以,这将是有效的,但不好,这是怎么回事,所以我们。
只是随机分配一个整数有多少人认为这是有效的,人们认为这是无效的,是的,所以这是无效的,因为您,会得到两个不同的随机整数,但是当您放入同一个,字符串好吧,我们将它放到内存中的那一个返回内存。
字符串的地址是正确的数字,所以有多少人认为,这是有效的有多少人认为这是无效的是的,这有点,更难,因为您可以在主函数中使用两个字符串,就像他们都是嗨家伙一样,但是有不同的记忆,地址,因为它们是不同的变量。
所以在这种情况下, ,会是无效的哈希函数,好吧,这个有多少人,认为这是一个有效的哈希函数,只是使用字符串的长度,是的,您说得对,因为如果您的字符串链接了,它不会改变。
你会得到同一个桶有多少人认为这是一个很好的哈希,函数是的,就像数学一样,总比总是返回要好, 42,但是如果您尝试对字典中的所有单词进行散列,则不会,字典中有很多不同长度的单词,即使我们。
拥有大小为100的数组,您不会真正知道其中的元素,第99个桶和第100个桶,因为英语没有,那个长度比42好得多,我会说仍然不是很大,那这个怎么样呢,让我们只返回第一个的值,我们字符串的字符。
那么多少人首先认为这是正确的,如果两个字符串相同,则它们必须具有相同的首字符,关于这一点,您认为这是一个很好的哈希函数吗,您认为这是,有多少人认为它比前一个更好,前一个有多少人认为这更糟。
这仍然有点疯狂,我们绝对可以做得更好,是的,很好的直觉,所以我想说的更好,只是因为你知道,您正在对字典中的所有单词进行哈希处理,从而为您提供26种选择,是的,没有很多以X开头的单词,但可能有。
以X开头的单词比长度为26的单词多,例如好吧,让我们尝试做得更好一点为什么我们不只是将所有,反击垫号中字符串中的单词或所有字符正确,这是最后两个的混合体,所以这个有效吗? ,比上一个还好。
所以会发生什么事情,发生冲突,并且此哈希函数,是的,正是这样,它们作为字谜的单词最终将散列为相同的词,桶,所以可能仍然不是很大,肯定是前两个方面的改进,因为您获得的价值范围更广,而且您可能会获得。
更好的分配,所以这是克里斯·桃(Chris peach)做的另一场演讲,一个带有Wikipedia的大量文章标题的模拟,他将所有内容散列,他们使用我们刚刚看到的哈希函数,所以有点像我,可能有点令人困惑。
但从本质上讲红色意味着这些存储桶,真的很长,白色表示水桶是空的,我们代表,这是一个窗口而不是一行,因为有很多哈希桶,对50,000,所以基本上任何时候您看到白色时,它都是空的桶,您会看到红色。
这是一个非常满的水桶,所以这不是超级好,散布着很多白色,所以好吧,如果我们尝试解决该字谜问题并尝试获得,这样可以更好地分配一些白色,加权总和,这样的想法就可以了,让我们把弦的每个位置都放在蝙蝠上。
字符值乘以质数的幂只是为了得到,更好的分配方式是您知道第0个索引本身,然后第一个索引是字符乘以31,然后,第二个索引就像可怕的除以31的平方,以此类推,更好的分配确实可以使我们在这里做的事情有意义。
所以我们,也希望成为素数,只是在一般情况下,散列与素数更好,所以我以前只是这实际上是在Java中使用的是哈希,字符串的函数,所以它从这样的随机变量开始,数字也只是为了增加点差,所以并不能全部从0开始。
以及类似我们拥有的那种权力结构的回报,因此您仍然可以,碰到一些类似这两种碰撞的碰撞,但最好,比以前所有字谜相撞的地方是的,是的,问题是,好的,这个函数会返回一个很大的数字,所以那个身体要带去哪里,位置。
这基本上是考虑您希望他们使用的哈希函数的好方法,可在任意数量的存储桶上工作,因此哈希有趣,所以是一个很好的哈希函数,应该真正返回40亿整数的整个范围,然后由,该哈希函数的用户修改存储桶的数量。
因为如果我们,假设上限为17,例如当我们想要重新哈希时, 234我们将变得像我们将不会获得免费的好处,散列,所以是的,基本上是在您要输入的地方,在编写哈希函数时不使用哈希函数,很好的问题,是的。
这应该是一个否,因为好的,所以哈希,原来是5 3 8 1,然后31次5创造1加像是的,所以它不会,确实有一个班级相等,因为这里有一定的班级,但是不错,是的,这与滑雪如何像ascii重视这些角色有关。
基本上,f比e大1,而资本B与a相距30,所以它像,如果实际尝试将其解码为ASCII值,则最终结果,我不知道副词,但是像a是97 B是98以及大写字母,数字或其他不同的字母或大写字母,抱歉,如果您是。
实际解码它与这些字母的距离有多远有关,彼此很酷,您还有第二个问题吗? ,所以这与我认为这些幻灯片类似,我认为这是,与此相反,但想法就像零字符,用哈希值乘以31的字符串长度乘以31的幂。
字符串的长度倍数的长度使您倍增,这就是,很多次,您最终将哈希乘以31,这样才是合理的,但是好吧,这是如何工作的超级细致的细节并不重要,就像您不会被要求开发一个非常好的直接哈希函数一样,也许在你的生活中。
这并不是我真正理解这一点的方式,我们只是,找到了很好的哈希函数,如果您愿意,我们会继续使用它们,真的很深入安全性或加密技术之类的事情,你会的,但是总的来说,计算机科学家不会开发新的哈希,功能。
重要的是要理解,例如为什么这个分布,这个值也不错,从技术上讲,它的长度是,像无符号整数一样,因为它永远不会为负,所以如果您比较,从int到unsigned int有时会像编译器警告一样,所以我认为。
这就是为什么,所以我认为从字面上看,这就像是从, Java源代码,因此他们不想在中的编译器警告, Java源代码,但不是,它就像一个特殊的unsigned int,所以,它不能有负值。
所以如果您将负数与某物进行比较,不能取负值,就像发生了一些奇怪的事情一样,凉,所以这是我们原来的,是新的哈希函数,就像蓝色是,真的很好,因为这是一到两个大小的水桶,所以你有一个很好的,摊开的白色少很多。
摊开的少很多,所以我们的平均水桶,大小要小得多,您对在哈希中识别有什么疑问,功能是好的还是有效的,是的,这是一个很好的问题,像您如何知道散列函数是否分布均匀,实际上,人们做的事情是。
他们知道他们只是蠕变,他们运行模拟来,看到您正在使用这种哈希函数的数据是,有一个很好的平衡权,所以Facebook使用的哈希函数,用名称或其他名称创建哈希映射,可能与。
可能会喜欢显示Wikipedia文章的哈希函数,因为那些,是两种不同的字符串,所以是的,有些猜测,涉及运行模拟,一般来说很难说这是,最佳的散列函数,但是您应该能够体会一下,比较这两个哈希函数。
其中一个会变得更好,分发一些大问题,所以这对您有帮助,因为我,已经告诉过您,您一生中可能永远不必编写自己的哈希,字符串函数是您将必须为以下对象编写哈希函数: ,您进行创建,因此。
如果您只是像点一样进行创建,那么您,尝试将您的观点放到哈希集中,以使哈希就像我不,知道如何散布你的观点,所以我放弃并扔给你,错误是因为没有点的哈希值,所以为了解决这个问题, 。
将不得不编写您自己的哈希码函数,并且等于运算符是,等于运算符,就算您喜欢这两个对象相等,在您眼中是该类的设计师,那么您将返回true,因此在此,假设两个点的x坐标匹配和, y坐标匹配。
但您可能认为可能存在不同的要求,然后您还可以查看哈希码,您必须考虑如何,我可以在课堂上真正结合这些部分吗,所以总体来说我们有很好的哈希,基本类型的函数,例如蚂蚁或流,因此您需要。
用某种方式喜欢那些东西或平衡那些被添加的那些部分,一起创建自己的哈希函数,这就是发生的事情,情况就像我们将两个不同的数字相乘以获得更好的传播,实际上有点类似于我们的字符串哈希函数的最终版本。
我们在那里等待所有这些字符的方式有所不同,因此总而言之, ,经历了一个集合的许多不同实现, ,发现一个跨越一个跨越的区域,我觉得这是一个非常真正的,计算机科学中很酷的部分,例如我们可以做到这一点。
这是惊人的, ,因此,您可以在计算机中完成其他非常酷的事情,如果您没有这些像我们一样的科学将无法做到,在这种数据结构上有固定的时间保证,是的,实际上有一个,开个玩笑。
如果您正在接受像软件工程面试这样的面试,有人问你,哦,如果你能解决这个问题,不知道只是一个哈希,你可能是对的,是的,因为这就像,就是这么好,计算机科学中的很多东西都归结为,突然之间,您的问题就这样。
更容易,您可以更快地完成,好吧,哈希在计算机科学中很重要,因为它对技术很有好处,访谈,这对散列集很有用,但对于,密码学和某种AI背后的想法,如果您想存储密码列表,可以像这样存储,是的,但随后有人看着你。
肩扛计算机将正确查看所有这些密码,因此,是的,这真的很糟糕,因为现在大家都知道我的密码并且可以登录,是我说的对,然后您重新分配了成绩或类似的成绩,成为一个好的系统。
所以一个主意是为什么我们不将其放入代码中,我们适合代码的一种方法是我们可以正确地对其进行哈希处理,因为哈希将,给我们这种随机的数字,实际上并没有很多,为什么这个数字来自密码一二三和它的直觉。
某人很难回去弄清楚那个数字原来是什么,有一些警告,这是您的哈希函数,这还不够,只是为了有效且分布合理,您通常也希望拥有,他们不仅使它达到40亿,而且使之成为一个庞大的数字,因为你真的想避免碰撞。
因为你可以像,夏娃很棒,并将一二三哈希值密码设置为哈希值相同,功能,那么您最终会像马蒂一样意外登录为,我说的对,所以您不希望其他人能够像猜测密码一样,然后随机进入您的帐户,因此我们真的希望尽可能接近。
尽可能减少冲突数量,以便这些哈希函数,否则这些哈希码对于密码来说确实是唯一的,其他棘手的部分,是我们希望这是所谓的单向哈希函数,意味着看这个数字并不容易,像原始值一样的值是多少。
所以我们的英寸哈希函数是,取数字,然后将其修改为10或对不起,这是绝对值,正确的数字,所以我可以像看哈希函数一样,这是我可以很容易弄清楚的数字的绝对值,您的密码里克是正确的,就像有两个选项一样: 。
负数对,所以我们要创建一个所谓的单向哈希,这里有一些sha-256的例子,通常会再次使用,可能不只是因为您正在做一些需要做的事情,人们只做sha-256的密码,他们没有编写自己的哈希函数。
您是否有关于密码学中如何使用哈希的问题,是的, ,问题是,如果您拍摄了256张图片,您找不到密码,那么,它们是您可能会攻击并尝试采取的几种不同方式,像尝试找出密码是什么,嗯,所以一个例子就像好吧。
我可以只看一个像我已经,输入您的用户名,然后我就从abcd开始,然后向下,问题是密码组合太多或太多,独特的密码,基本上可以永久使用,因此该怎么做,相反,像黑客通常所做的是,他们会像,密码的数量。
因此这些密码都被散列了,但是如果可以的话,就像您知道的那样,您可以尝试访问散列函数,就像,通过它输入单词密码,然后与多个不同的用户匹配,在该文件中,那么您就知道他们的密码必须是密码,依此类推。
因此我将其称为字典攻击, ,不能放屁的常见方法是随机给sha-256放东西,这是没有办法的,喜欢反向工程,除了原来的密码,尝试所有的一些组合很好的问题是的,问题是黑客很难访问像此文件这样的文件。
这并不难,就像不该发生的事,而是某事,确实发生了,所以我从来没有做过,所以我想我真的不能说有多难,是的,但这是发生的事情,每隔几个月,也可以防止类似我刚才所说的字典攻击,如果您基本上喜欢。
您可以通过它来给每个用户一个数字,根据他们要注册您网站的数量,然后,散列数字和密码的组合,这样您就不会,能够像密码一样尝试并获得大量的点击次数,像密码逗号一,密码逗号二,所以它仍然应该,永远是的。
所以就像Linkedin密码转储没有那样做,并且喜欢,这就是为什么如果您听说我的密码转储真的很糟糕,像2012年一样,我认为2011年臭名昭著总是让您的密码陷入困境,是的,这被称为是错误的,是的,我。
我也想剩下一点时间,所以我想谈一谈,设置哈希表的另一种方式是一个有趣的事实,您可以告诉所有,您的朋友喜欢您今天在CS 106牛肉中学到的东西,鸟叫杜鹃鸟,它们产卵,其他鸟筑巢,像原始的鸟儿一样被踢出去。
让这些新的父母,这些父母,这些鸟照顾他们的孩子,所以这很重要,因为,引导我们进入一种称为杜鹃哈希的事物,因此杜鹃背后的想法,哈希就是我们需要的包含真的非常快的东西,就像我们保证的那样。
我们只需要看两个地方就没有链接列表或类似的东西,我们只是要看两个最大值max,所以在,为了做到这一点,我们可以做的是可以有两个不同的数组,像两个不同的哈希表,并且每个哈希表都有不同的哈希,函数。
因此我们可以尝试将元素放入两个元素中,然后,我们只是选择一个空位,所以当您搜索时,包含以后,您只需要查看这两个点中的每个,这件事是广告变得有点困难,因为添加时,可能必须踢出一个已经存在的元素并将其移至。
其他哈希表,这就是为什么它被称为布谷鸟哈希,所以有点,例如,如果我们想以鸟类为例,那么重要的是,它们具有两个不同的哈希函数,因为如果它们相同,则像,发生冲突的事物将在两个哈希表中发生冲突。
而不仅仅是在一个哈希表中发生冲突,对,所以当我们插入三个散列函数时,它们就是两个,随机选择将其放在此数组中,这是九, mod 4是1,所以您放了6,所以是13 mod 4,也是1 OK 。
5所以15 mod 4是3 10加1是11 mod 4是3我们插入7我们所以7所以我们插入7 ,你得到21 mod 4是1,我们放在这个位置,而15 mod 4会放在这个位置,正确。
所以我们的问题还可以,我们将不得不踢这两个之一,出来,所以它放了7,这是随机的,然后我们将5移到,到另一张桌子,然后将其放在该位置,所以我变得更长一点,因为你可以想象也许,这个地方已经有东西了。
然后您必须将其移回这个位置,桌子等等等等,但是真正酷的是当您搜索,包含您只需要看这两个点就不必看,这样包含的其他任何地方真的非常快,因为它只会最大化,看两个元素,是的,问题是,您是否可能会进入这个周期。
而您知道我们一样,在这里放五个,然后我们像棍子一样踢在这里,你知道吗,在这里四个,然后我们要在这里踢棍子,在这里三个,然后,然后是七个现在的七个,然后是五个,那你可以结束吗,在这个循环中,是的。
因此通过这一实现,更难,因为如果发生这种情况,您必须跟踪此类循环,基本上像您的两个表之一创建一个像新的哈希函数一样,那么你也可以非常小心地确保自己是,重新整理一个必要的项目。
因为您可以想象如果只剩下一个地点,您的桌子上您的广告时间会非常长,所以这个问题很好,关键是要告诉您有很多设置方法,哈希以使用哈希,因此在搜索解释时要好一些,它包含但在应用程序方面有点差,所以有。
您可以使用散列来进行我们刚刚给出的散列的许多不同方式,您一个我们刚刚告诉您一个非常普通的一个,现在布谷鸟哈希,关于对今天我们学到的东西进行哈希处理的最后一个问题,好吧,周一休息。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P23:【Lecture 23】CS106B, Programming Abstractions in C, Win 2018 - 鬼谷良师 - BV1G7411k7jG
没关系,所以这是第九周哇,我猜这几周都在赛车,我的宝宝的第三周是她生命的第三周,所以我们,我想现在有两个不同的星期计数器同时在同时运行,如果您好奇爸爸的情况如何,那很好,这很有趣,我会说。
每个星期都比上一个星期好玩,因为就像他们一开始一样,只是坐在那里,他们什么也没做,所以这是一个非常可爱的马铃薯,你知道,每两个小时就可以了,我可以更换Boop ,对您而言,但年龄越大。
他们越能开始做您的事情,知道他们开始看着你,他们抓住你的小指,我,不知道这就像您开始欣赏这些小小的小东西一样,手势,您正在寻找,您知道自己假设他们还有更多的选择。
比他们真正拥有的代理更喜欢他们会看着你微笑,你会走的哦她对我微笑她对我微笑好像没有她的脸,肌肉只是随机碰巧在那一刻对齐,看起来像,微笑,你知道,但你认为她曾经对我微笑,你知道我会说你。
知道这真的给了我关于工作的新视角,整天应对她的大惊小怪,po嘴和哭泣是一种很好的做法,学生对期中成绩和这类事情的抱怨,真的有很多相似之处哦,不,我只是在开玩笑,但无论如何, ,玩得很开心。
你知道我继续非常感谢所有, Namie和部门领导实际上所做的所有工作,在剩下的大部分时间里,我大部分时间都缺席,我希望这里的季度也很好,嗯,所以今天,我们要做什么我们一直在谈论散列。
没有关于兑现您上一次作业的作业,现在分配任务是关于图形的Trailblazer程序,原定于星期一开始一周,但由于我们爱你们,我们决定延长,定于下周三欢迎[鼓掌] ,是的,请注意。
作业7的延迟时间仍然没有用,所以您已经,必须在那个日期之前把它交出来,如果你不把他们交出来的话,就可以了,到那时我们将不能接受任何积分,因此请注意,截止日期还是可以的,但是会给您几天的时间。
正如我在此之前所说的,今天定于14日在这里,我们正在研究的这些主题都可能在最后阶段,因此我们了解到,在我要教的决赛中可能会出现哈希问题,您今天进行排序时,我们可能会在决赛中出现排序问题。
在这之后可能要花几节关于继承的讲座,在决赛中成为一个继承问题,这就是为什么你关心这就是为什么你,应该以四倍的速度收听或观看此视频的其余部分。
你现在正在看,好吧,让我今天去看幻灯片,让我们,说说排序,我想你知道当你把东西放进去时,排序是什么,订单有不同的顺序,您可以将其整理成我的意思,我认为,数据类型具有所谓的自然顺序,例如,如果有矢量。
任意一种intz,那么您通常会说哦,我把这些小数值,在数组的早期或较大的值在数组的后面,因此您可以想象,许多不同数据类型的自然排序,例如如果我有一个向量,奇怪的是我如何对它们进行很好的排序。
这可能像字母顺序或,就像您知道的东西,但是它不敏感,您是否总是想按字母顺序排序? ,按长度排序或按其他度量排序,所以我的意思是排序的想法,只是意味着想出一些您想要的订单,然后安排您的。
数据按顺序排列好吧,现在有趣的事情之一,关于排序的原因我们想教您有关排序的原因之一就是,一个经典的计算机科学问题,它具有很好的特性, ,一大堆你可以做到的方式,排序算法,它们以自己的方式都很有趣。
有趣的运行时和内存使用要求给他们,他们在那里,谈论大O谈论递归和,其他主题,实际上其中一些算法非常聪明,它是,非常有趣,所以今天我将快速向您展示两个或三个,排序算法,您知道我想要的目标是。
了解它们是如何工作的,我不会要求您从头开始编写任何代码,测试,但我可能会问你,如果我运行的话,这是一些数据吗? ,算法对这些数据的排序会发生什么,使我画出一张图片,一些在测试中会发生的事情。
所以这里的列表有一个,一堆不同的排序算法,我将重点介绍其中的几种,现在转发,这可能是我最喜欢的愚蠢排序算法, Boco对名称进行了排序,因为它不是真正的算法, , bogo sort的想法是。
您将数据混洗,然后检查是否发生了,已经按照排序将自己洗牌了,如果有,您停止了,如果没有,你重复一遍,所以我打个比方,我总是用50来接你,一副纸牌,然后去捡起正确的52张纸牌,这就像概率。
你五十岁就可以拿起纸牌,完美排序的王牌王后签入您知道所有方式的排序顺序,当然这是不太可能发生的,但是如果您持续进行足够的时间,也许你会碰巧得到排序的输出,所以这是一个愚蠢的算法,当然。
您永远都不会真的想要这样做,这是我要交谈的唯一原因,关于它,我认为这是一个有趣的问题,当然,现在最坏的情况是大O很明显,最坏的情况是什么,这个平均数,您说的是阶乘,可能更多。
预期的情况可能发生的最糟糕的事情是什么,如果我做这个无限,就永远不会,只是碰巧永远不会将它拖入,当然,正确的顺序可能在弹道上是不可能的,如果永远坚持下去,它将永远不会变得更多。
更有可能最终得到正确的答案,但有可能,你不会,但是无论如何,这有点含糊,如果你,其实涂了这个,我不是真的,徽标开始说,虽然现在没有排序,但它具有我们的两个功能,将不得不写。
所以排序意味着从头到尾循环并检查,如果邻居不正常,那么这一次要花多长时间,功能需要M的o我有几个人说是的,因为我,必须遍历整个数组,我正在寻找邻居,邻居混乱,没有排序,所以一旦大声就打电话,事件。
还有一段时间没有进行随机排序,所以我认为最好的情况是,该算法的最佳解决方案是什么,因为我愿意,考虑任何排序算法,考虑最佳情况是很有趣的,可能的情况或平均情况,最坏的情况最坏的情况永远存在。
无限可能已经发生的最好的事情是什么,对,这是一种有趣的怪异情况,如果您通过,已经排序的数组需要花费多长时间调用它,一旦说是,就对它进行排序,因此while循环不会,输入,所以它就停止了。
所以实际上需要n个最佳情况下的o ,最坏的情况是我听到有人说的平均水平,我认为这是一个很好的直觉,就像您知道的一样,如果您参加我们的三门课,例如103 109,您会更多地谈论,可能性。
所以我的意思是您可能会改组为正确的可能性,我想起一副纸牌,例如52张纸牌中应该有一张,首先,所以52张卡中的一张首先着陆,然后给出,首先降落的概率是下一张卡片的概率为51 ,正确的卡片落在第二位。
所以您有点像52张一张51张一张,从50到49中的一个一直下降,所以这是所有产品的总和,最终成为因数超过N的阶乘可能性,就在给定的随机播放上,所以我的意思是有时候您将必须执行此操作哦,这是,可怕的是。
您知道n阶乘运行时确实很糟糕,所以我不是,如果您确实希望看到它运行,则将其作为一种严肃的算法进行讨论。
我实际上有一个可爱的创作者项目中的代码,而我要编写的代码,为每个排序算法再次运行,在此我设置了数组的初始大小,和最大尺寸,也许我会将初始尺寸设置为5,在这里我只是为了,两端各有一个随机数向量。
然后进行排序,算法,我会花多长时间,然后打印多长时间,如果,我打电话给我我下面有虚假的函数或我有,选择我今天将教您这些不同的种类,因此,如果您将其用于BOGO排序,则需要花费半秒钟的时间。
甚至排序10个元素,等等,让我在这里做一些事情,而不是n次2 ,我不加,我认为看到运行时间为此增长真的很有趣,所以有点非线性,但是我喜欢它,就像,再增加一个,大约是以前数量的10倍,元素因为它就像阶乘。
所以第11个元素需要11倍,只要第12个元素花费的时间是该元素的12倍,那么这可能会花费,大概4或5秒,我会猜测11个元素中有4个,尽管这是一个平均值,如果它可能卡住了,我不知道我们会回来,我会离开。
在运行的同时我们不希望演讲被n的大O阻塞。
这里的阶乘代码,但是无论如何节奏都是愚蠢的,所以让我们继续,在一个真正的排序算法上,我认为谈论um很好笑,选择排序是我们想要的第一个类似实际合法的真实排序算法,与您讨论节排序是在数组中扫一扫的内容。
或者,向量,找到最小的元素,然后移动它,将其交换到最前面,所以就像在此数据中,我认为最小值为负4 ,我想我扫了一下,找到了,然后将其交换到,数组好了,现在非常重要,我想确保您了解这是,不像一个向量。
你说删除,每个人都移过来塞,就像我交换了2个元素的值,那真的很重要,我这样做的原因是,如果我删除并添加每个人的,变速变速真的很慢,我不想做,好的,所以我基本上将前索引与最小索引交换,所以现在。
第一次扫描第一个索引现在就在其中存储了正确的第一个值,您进行另一次扫描,但从第二个索引索引开始,寻找最小的剩余元素,然后移动,索引一,所以现在哦,第二个下降了,那里被交换了。
第二个索引现在从第二个索引第三个开始再次扫描,索引,您能否找到我认为是七个的剩余最小元素,然后交换为索引三,您需要进行多少次扫描,哦,所以我的意思是我不是说整个算法的大O 。
有多少次了解想弄清楚谁要搬到最前面,让他们遍历数组并查看所有值,看看我是否该,是最小的一项,我必须要做多少次,不要减去其中之一,是的,因为非常非常,最后一个,没有人愿意和别人一起散步。
所以我们就是不这样做,所以基本上n对n减去一个扫频运行一次扫频需要多长时间,单次扫描,这取决于对,第一次扫描总共需要n次。
这种算法的运行时间就像您知道n加n减1加n 。
减2加对,一直到3加2加1 ,是自然界的东西,是的,所以,如果您知道一些数学,你知道那里的那个系列的总和有一个简化,等于n乘以n加2的1,基本上等于1/2,如果,没有很好的本能。
为什么我听到了一个很好的描述,那如果你把它放在这里,然后把它和这个配对,这使得n加1正确,那么如果您采用n加1或n ,负1对不起,您将其与这两个配对,使n加1 ,正确,如果您将它们加在一起,您有多少对。
您就有1/2 ,这些对中的n对,您有2倍以上的n n加1 ,好,所以等于您知道N平方大致等于N平方,两个大约N的平方加1/2 n的那个家伙,所以,选择排序是n平方,这就是我的意思。
那就是这个算法的运行时间是多长时间,看看你是否不相信,我和我的怪异数学和东西,您只需运行代码即可进行衡量,您可以测试并查看正确的内容,可以凭经验进行验证哦,我喜欢这个11 。
元素花费了45秒12个元素的速度更快,因为您知道随机万岁。
谁知道会发生什么,好吧,我现在要停止该程序,让我们开始吧,回到同一程序,我在这里有选择排序,在这个文件中的实现,如果我跳到那里,你实际上可以,没有显示代码,因为我只想就,概念。
但是代码基本上就是从索引开始的样子,我和你从我加1走过,叹了口气看是否还有,小于我的东西,如果发现较小的东西,则将它们交换,只需获取每个索引并将其他值放入其中就可以了,所以如果您有的话。
知道Big O的本能,你可能会说哦,我有两个for循环,直到向量的大小为n,因此通常当您有两个,嵌套循环达到集合的大小,通常意味着,循环代码为N平方N右的大O ,所以你现在去那里。
只是为了验证它是N的大O平方,让我们,实际运行它,我想在这里做的是我认为最好的方法,说明Big O将以不同大小运行,每个大小都是其两倍,每次其他尺寸加倍,我们就开始,大小为10。
我们将上升到大约100k,然后看代码多长时间,拿达雷尔,所以我认为,如果您忽略了低数字,那么较小的数字会更大,主观上更多的波动,当您使n变大时,您会看到大约四倍,两倍于您使运行时增大了四倍,因此。
运行时间是输入大小之差的平方(如果我是,将运行时间增加三倍,每次运行时间将增加九倍,每次运行时间增加100倍时,输入值增加10倍,因此更改,运行时间的平方是输入大小变化的平方,所以这是N 。
平方算法几乎恰好是您乘大算法的四倍,这里的数字好吧,选择的东西排序。
我可能会要求您进行测试,如果您正在运行,这就像一个数组,选择排序向我展示前几幅,因此选择开始就可以了,您只需向我展示哪些元素可以,交换或类似的东西,我认为您可以处理那些不是。
通常在考试中遇到最困难的问题,所以如果您提出问题,您可能会没事的,关于选择排序或它如何工作,是的,如果您是,试图挑选谁进入索引四,然后你走过去,这是什么,已经有最小值了,是的,我是说我认为这段代码。
在这里,我们可以选择排序它说交换,我认为代码,交换说,哦,不,但是我认为您可以做的基本上可以,只是说,如果我不是J,那么交换那三个可能会给你一个,较小的运行时间提升,但其他所有大O仍将是N平方的。
像这样,好吧,这是选择排序。
记得我们刚才讲过的最坏情况平均情况,关于大平均值的平方,我想我们只是在谈论,通常,平均值通常约为N平方,最好的情况下最坏的情况是什么时候会花更少的时间,比起N平方,你知道BOGO排序是最好的情况。
的n个记住这一点,那就是如果您将其输入,则输入一个已排序的输入,像您只是在询问某些值是否是。
已经在正确的排序索引中,如果我将排序后的输入输入到选择排序中,它的运行速度将比,并发誓您认为还是会发生什么? ,是的,是一样的,因为它确实不会更快,仍然需要扫一扫以验证它是否不知道该数组已排序,直到。
它基本上完成了所有这些扫描,我想您可以想象一个优化,如果您扫过哪里,并以某种方式检查它是否按照您的排序,扫过你可能会停下来,如果它没有被分类的话,最优化,因此编写的代码基本上是N平方的O ,时间。
输入是否已经排序或大部分都不重要。
排序或类似的内容,只是让您知道,最好的情况下最坏的情况在这里都是一样的,好吧,让我们看看,如果您不介意,在另一轮运行中,哦,那只是一些运行时图,已经谈论过运行时间了,它说让我们谈论其他的。
断言排序通常称为插入排序,比选择排序稍好一点,插入排序的作用是他认为数组具有两个分量a ,前部分已经排序,数组的后半部分没有排序,在某种意义上已经排序的选择排序也具有该属性,就像您的索引一样。
我正在将左侧所有元素都放在,正确的地方,但我想这有点不同,因为,插入排序左侧的部分相对排序,但可能不是,最小的东西,所以这就是你要做的就是开始成长,通过在每次添加元素时向其左侧对区域进行排序。
您将其移至已排序元素的适当位置,区域,如果您继续这样做,则随着区域的最终增长,消耗整个数组整个数组将被排序我想说插入,排序最类似于许多人对事物进行排序时,您正在拿起手牌或作为老师我一直在想的例子。
您是否进行了一系列测试,并且您基本上知道我的姓氏,您要做的是手中握有一堆,未分类的堆在,你在桌子上拿了一张新桌子,你就好了,我手里拿着三个,最后一件事是a和B和Y,这就是你知道的L所以,在成为你之后。
但在电线之前,所以你需要一个新的,它以一堆中的排序顺序换了一个新的,你知道我的意思是就像你已经,一堆正在生长的小堆,您在堆放东西时就添加一些东西,接下来,我将为您展示图片和示例以及代码。
但是它的运行时间也是n平方N平方的大O ,就像您可能称之为复杂性类之类的东西,而不是选择排序,但是您知道我们谈到了这些常量如何,在大O中非常重要,但这是一个N平方,碰巧通常有一个,较低的常量。
然后进行选择排序,因此在N平方的类内,您可以,仍然有比其他东西更快的东西,所以这被认为,比选择排序好一点,这是一张图片,所以您要做的是将一个元素堆按以下顺序排序,定义。
因为一个元素不会因第一号手机而混乱,第二个要素,你说还可以,订购我的那堆,所以我将其交换,以便现在我有了一堆,现在两个,你有十五个,排序器,所以现在您看第三个索引的日期是两个,并且您说我。
要把他包括进我分类好的堆里,因为他出了问题,所以我会换掉他,直到他按你的顺序排列,如此有趣,也许这个家伙是对的,在这里,如果所有其他这些都已排序, ,那么你想包括这个家伙,然后把他带到正确的地方。
你是交换掉掉交换掉还是交换掉掉交换,直到他处于正确的位置选择排序,看起来很遥远,想出了很多办法来做这种算法,邻居交换一次将您移回一个索引,直到您到达,正确的地方,交换工作较少,如果,它已经被排序是真的。
但是如果它几乎已经被排序了,如果不是很糟糕,则排序该算法将运行,速度更快,因此,如果您基本上想查看此代码,则算法为,像您有一个整数,就像您对自己的大小的限制,排序的桩是,然后有一个int J。
您要向后走直到它到达。
归零或直到您处于排序顺序,所以看起来像这样,你有一个完整的,这基本上是排序堆的终点,现在,您从J开始,我是I,然后交换回来,J是新元素,只要您大于,您要插入的元素,因此有两个循环。
堆的增长和while循环可以交换回来,直到每个新元素,在循环的正确位置,而循环又嵌套,它们看起来都一样,与数组的大小有关,外循环很明显,与内部while循环中数组的大小有关,还不清楚。
内部while循环的边界是,但是我想,它是从我开始的,它在某种程度上与大小有关,所以在最坏的情况下,如果要查看,可以一直返回数组的开头,这个东西在起作用,这里是插入排序哦,你知道我在做什么。
运行该命令时应该已经完成,您会得到输出,如此了解,就像这里的选择排序输出一样,让我保留一些内容,运行时数据在这里,这是选择所花的时间,我不知道为什么,有一个换行符。
但是无论现在有什么让我们进行插入排序,我都会,只需将其更改为此处以说插入排序即可编译并运行,然后我们开始,所以我的意思是比较有点困难,因为字体不是,我猜是一样的大小,但我认为我们看到的是它快一点,抱歉。
我不能完全将这些排列完整,但是您知道如果您查看25 , 60次选举需要400毫秒,而插入则需要280次,而您,知道10到40的大小需要四点六而三点六是,只是随机一点就好一点点快一点,整理了数据。
但仍然有大约运行时间的时间,对,如果您要为越来越大的输入数据继续绘制图形,我,认为您会看到这种趋势继续下去,所以我们仍然在谈论N平方,在这里,我认为我们提到的最好的情况是排序的时间或大部分时间,排序后。
如果它已经完全排序,则整个函数为, N的大O值真的很酷,所以这是插入的不错的属性,如果在最坏的情况下,它仍然具有N平方,但在最好的情况下仍具有,它进行了很多交换,所以我认为在最坏的情况下插入。
排序实际上比选择排序慢一点,因为它是如此之多,交换,但是无论如何,您对插入有任何疑问吗,分类,我认为如果必须编写代码,选择排序更容易正确实现,你知道他们给了你一块空白的画布吗? 。
排序更像是人类实际对物理进行排序时的行为,对象,好吧,让我忘记之前我要复制并粘贴运行,插入源的时间,所以我们可以比较所有这些不同的源,好吧,现在我想开始教你一些很酷的奇特风格,您已经准备好了。
让我们谈谈合并排序,这可能是最后一个。
我到今天为止,我们将看到合并排序是非常有趣的算法,您要做的就是将数据分割为分而治之的算法,一半,您将两个半部分排序,然后将两个半部分合并回去,组合成一个分类的拉动,因此它的过程比它更详细。
但这是一个基本的想法,嘿嘿,一堆堆的东西移动了,而你却一起出现了,归纳为一种算法,可以想象这两堆测试和测试,在他们身上有一个人的名字基本上,你要做的就是看两堆,无论是哪个字母先出现,您都要抓住那个。
然后您,只是重复一遍,您知道我们现在抓到的第二个决赛,最重要的是有一张新纸,因为它在那里抓了一张,所以现在你,再次比较第一轮的增长重要性,而不是抓住其中的一个,一个反复出现,您只需继续这样做。
直到书籍文件,精疲力尽,您现在已经内置了一个文件,这就是合并排序的作用,将一半分成两半,然后将它们合并在一起通常实现,在草书李中,我们将在稍后讨论为什么,它的运行时间是n log N的Big O。
我想让您记住当您,将N的大O平方与n log n的大O进行比较,之所以不同,是因为就像大O的排序规模一样,彼此相邻,但我希望您了解那样,更好的n log n比N更好,平方,我们将在一分钟内看到,好吧。
让我们尝试了解一下,算法工作更多一点,这是一个数组,我想使用,合并排序算法,所以我该怎么做将其分成两半,现在我对,一半如何将一半好好排序,就可以对它们进行插入排序或,正确的方法,但是嗯。
只要我有一个比那个更快的排序算法,如果合并,我可以用什么排序房子,如果我在房子上递归调用自己的函数,听起来像种,一个疯狂的主意,但你们已经做了太多的递归,以至于你,也许现在对这个疯狂的想法感到满意。
所以如果我们合并排序,左半部分将再次重复整个循环,我们将分割右半部分,然后我们将分类一半,如何对合并的部分进行分类,再次对其进行排序,因此我们将其再次拆分为小小的单个元素,现在我们已经将那些拆分了。
我们必须对它们进行排序,排序22您如何排序18如果只有一个,则无事可做,元素hmm似乎是一个非常基本的情况,您可能会说这种算法hmm ,有趣,所以也许我们不需要做任何事情,因为您现在已经微不足道了。
什么也不做,并排序这两个一个元素数组,我们现在需要合并它们,变成一个,那么我们如何将它们视为一堆,而您只是抓住了一个,每堆较小的一个,直到你把18个较小的做好为止,所以我来抓,他们和22岁。
所以我会抓住他们,所以我现在就知道,我必须做同样的事情,那里的东西12和负4分裂他们排序他们没有,要合并它们,负数4首先出现,所以毕竟现在是这样,我已经尝试完成,可以将可怜的元素排序到正确的位置。
在上面,所以让我们将这两堆现在分别进行排序并,让我们合并它们,以便抓住最小的一个,抓住负的四个,然后抓住,十二,然后抓住18,然后抓住22,你得到然后。
您在右侧在这里所做的所有相同的魔术拆分它们拆分它们,再次无事可做合并它们再次分裂这两个无事可做合并它们,现在合并这两堆抓七抓31抓42抓58 ,现在我们得到了两个四个元素或两个堆,所以抢抢抢直到你。
把这些都整理好之后再把它们放在一起,现在,如果您对此表示怀疑,我会听到您在说什么,没有,这比循环和交换人与物的速度要快,对,因为这似乎需要做很多工作,但您只需要,相信我,我的意思是大O与n的大值有关。
我只需要,说服您,如果我们正确实施,它将更快。所以让我们再次,谈论我认为该算法最困难的部分是合并部分,您有两个分别进行排序的子堆,需要放入,他们一起放在一个单一的类中,所以你如何做到这一点,想象一下。
您有这两个四号堆,您需要,合并它们,我认为实现此目的的最简单方法是将它们视为,我猜有两个小向量,您可以认为它就像索引一样,指向你在每一堆中所处的位置,就像每一个他一样。
我不是在第一堆表演的地方-他一直在我所在的地方,第二堆,当您从堆中选择时,我们加上加上索引可以移动,前进过去,所以您从这里开始,在14-23 14中进行比较,你能接受考特尼吗,你加上我现在想成为一个人。
再加上,准备32到23,就可以看到,然后您会看到Plus +步骤,怎样做,只是重复一遍,所以我们都有,我敢打赌,我们可以锻炼大脑中的肌肉,让我们尝试一下,这是我唯一想和你们一起编码的人,因为。
我认为这是唯一真正令您兴奋的尝试将其实现为,这里是一对,所以说合并排序,我有一个函数,说合并排序就在这里吧,所以请记住我说过的话,将数据分成两半,然后我说将两半分类,然后说合并它们好吧,我会帮助。
告诉您一些信息,因为我知道您知道我们必须在这里共同努力,我将把数据分成两半的困难部分,听起来很乱,向量类中有一个不错的方法叫做子列表,其中,您传递起始索引和长度,它将像您知道的子字符串一样切片。
它将切出许多元素并将其作为新向量返回,如果我,说类似intz的矢量左等于B点子列表是什么,上半年指标,零双向链接到您,V点大小超过正确,然后向量,等于2的V点大小到末尾I的V点子列表的英寸右边。
认为如果不传递第二个参数,它将一直持续到,最后,所以我做了最困难的部分,如何将这些半部分分类,我应该在左边调用断言排序,还是在右边调用插入排序,我该怎么办,是的,我应该递归递归,我应该叫合并排序。
是不是仍然觉得很奇怪,就像合并排序不起作用,我是,编写它,我对此还没有信心,但是是的,就像我们完成之后,这将是正确的说法,以表明您完全正确,现在我们必须,在我做这些讲解之前,我会先说说合并它们。
我最常犯的错误是我开玩笑的那个,我总是问你关于递归的问题我是什么,到目前为止,我都忘了这段代码,我爱你们,我教给你了一些东西,卡住让我很高兴,嗯,是的,我们需要一个基本案例,以便您知道基本情况。
案例工作通常就像什么事情然后我不需要做任何事情,递归正确,我们正在实现的东西似乎很棘手,我们确实需要递归的情况下什么时候我不需要递归是什么,是易于排序的向量,是的,它只是一个元素,甚至是零。
就像基本上是V点大小一样,小于或等于一项法律无事可做我说的小于或等于,一个,因为我想很可能他们可以传递一个空向量,让我们,只要确保我们能处理所有情况就可以了,不是这样,不是这样。
如果我在不需要第二个参数的情况下做错了,这是这个吗,也许我确实需要第二个参数好,所以长度将是V点大小,减去左点的大小即剩下的全部内容,然后合并,可以记住我们所说的关于合并算法的内容, 。
您应该将图片备份到屏幕上,并且应该具有这些索引,进入左右两个向量,并记住我们,假设我们的代码正常工作,那么当我们说我们被合并时, ,一半,我们以为那是可行的,现在之后,回到我们那里。
那些一半现在已经正确排序,所以我猜我猜我。
可以在这里做的是,我可以说您知道左右已排序,现在将它们合并。
所以让我们跟随这张照片,让我们使i1和i2和i1等于。
零,这是左数组中的索引,int I 2等于零,即,是在正确的数组中的索引,是的,所以现在让我们反复选择哪个是,较小,我认为这可能会是一会儿循环,也许当我1 ,小于左点符号或I 2小于右点尺寸。
一旦这两个intz都超过了其部分的大小,向量,然后有谁做对了,所以我认为我们需要做的是,决定我应该从左边还是右边,我认为代码的格式如下: ,从左到右,我的意思是听起来很明显,但我,是的,好的。
让我们忽略if部分,但是您如何,左边的元素是什么意思,左边的元素在哪里,方面,我认为指数为零很好,在一般情况下,索引我一个正确的,所以如果我说左括号基本上是我要比较的。
现在是在比较我赢得的左括号和右括号I- ,我想从这两个东西中取较小者,我从哪里拿走,我在哪里放这个好,你还记得这里的目标是对向量进行排序, V,所以现在我已经取出了V的内容,对它们进行了排序,现在我。
需要将排序后的结果放回V,所以我认为这样做的好方法是,清除V或,或者我猜您可以做的是,您可以说另一种方式,编写此循环标题就像我正在尝试设置每个, V的值,所以我可以做一些类似int等于零小于V点的操作。
我加号的大小,所以这里的目标是我要设置VI为左,一只眼睛,或者如果我从右边拍摄,我将VI设置为正确,我-你呢,可以理解,就像我在选择要放入V的排序版本中的内容一样,所以如果你从左边拿东西。
我想如果你忘记了。
看看这里的图片,我将其放在VI中,做那部分,但我还需要做什么,也许有人呼吁,是的,我必须在索引中添加一个,就像我从i1中提取一样,我必须移动,向前一个,所以我看着上面的照片中的数字32 。
是的,正如您所说,让我做1加加,然后,如果您从右边拿走,我就加2加,是的,所以现在我跳过,声明,如果您像我一样,可能会打扰您,只是加热一下,底层修复它我已经解决了它,您不能忍受观看未写的内容。
那里的一段代码,那是什么测试,我的意思是我基本上认为如果剩下一个,较小时,请左移右,因此我认为是最初尝试编写此代码,就像如果左眼比右眼小-那么我将从,左侧右侧大部分是正确的,尽管您有一个问题。
知道那是什么,是的,如果我们已经放弃了该代码,那么该代码将无法正确执行操作,一个或另一个阵列的边缘(如果您已经消耗了所有,左边的元素,那么你就不能进入我赢得的括号,因为它将,失去平衡。
如果您已经消耗了权利的所有要素,您无法访问将超出范围的访问元素和xi2,所以我认为,基本上,我想修补此if test以确保是否没有剩余,右侧或左侧的一个小于右侧的一个,这是我想两次从左边拿东西的两次。
类似以下内容,我想我认为这有点棘手,布尔测试完全正确的第一次尝试,但我想你想要的东西,如果I 2超过了正确的大小,或者I 1没有超过,左边的叹气和左边的叹气较小或类似的东西。
就像如果我们在边界内并且它较小,那么从左边取走,我认为,合并是代码中最难的部分,拆分和排序是,神奇的简单部分,我们只需调用函数并执行版本和操作即可,但这就是合并的东西,如果您没有很多东西。
我希望它现在可以使用,相信我们能正确解决这个问题我会在主要功能中说,在这里,如果我调用合并排序,如果我没有真正对向量进行排序,它将崩溃,就像如果我们不这样做不起作用,你会知道如果我有这个。
真正快速的运行时间,但是我欺骗了它,因为它甚至都无法排序,你知道我的意思是我不会让自己摆脱那好吧,让我们,试试看,让我们看看它准备得有多快,这本应该很大,运动,让我们一起看这些运行时编号,我们完成了。
记得另一个人我可能已经忘记了另一个人做了什么,让我们一起来看一下,合并它们的插入排序以完成40,000个元素,花了大约一分钟的时间进行合并排序,而用一半,秒不到半秒,哦,你知道是否可以看到。
有点隐藏在我的讲台后面,但是58秒的速度要快得多,相对于300毫秒,这就像速度更快,但是速度更快,但是如果您,仔细考虑一下,记得我说过N平方和n登录是一个,差异很大,基本上是您所使用的数字。
退出多个事件,然后将其添加到多个登录帐户中,因此您取出了一个, 40000的倍数,您添加了14之类的倍数,或者是,很多不同的权利,这就是为什么这些数字如此不同,这里的时间还可以。
但我们来谈一谈大O因为大O实际上是关于增长的,认为这些数字足够小,以至于很难看到一种模式,让我们得到更大的数字,让我们上升一个档次,然后转到而不是,上升到十万让我们去一千万美元,看看会发生什么。
所以现在我们有了一些更大的数字,我们可以在这里查看,已经破坏了结局,你知道我基本上告诉你哪位女士,已经病了,应该是,我告诉你会发生什么,尽管那是n log n的Big O,但是。
我不知道您是否知道如果您仅查看这些数字,你知道我的意思是我想如果你对Big O不太了解,你会看,可能会说它是n的大O,因为它看起来像,如果您将n加倍,则运行时间有点像,大约是正确的两倍。
但是如果您真的要更精确,那也许,更像是两点你所知道的东西,这就是log n ,看起来比线性稍微多一点,抱歉,运行时更改将等于,输入大小的变化,您现在可以输入了,这就是我真正喜欢的。
可以比较的是我可以显示多少元素,排序20,000个元素所需的时间中有多少个元素,插入排序我可以知道合并排序中有超过一百万个元素,所以我,意思是我希望我已经说服了您,合并排序更快,并且确实可以。
对数据进行排序,因为如果不对数据进行排序,程序将崩溃,好的,这是一个很好的例子,您知道递归排序和另一个。
关于合并排序真的很酷的事情,我可能无法,今天要详细讨论的是,与其他一些排序不同,可以并行化的算法现在你们可能已经听说过,知道一切都在这些云层中,你知道这些充满了大农场,服务器并共同努力以解决庞大的数字。
问题和问题,像这样的权利,当然,这是因为我们拥有,基本上用不了聪明的方法来使单个计算机更快,过去曾经是每两年一个人的速度,电脑将使您加倍知道摩尔定律,计算机变得越来越快,分子对我们来说正成为问题。
知道所以这就像我们快要耗尽空间以达到相同的速度, ups,所以我们可以使事情更快的唯一方法是拥有很多计算机,很好地解决问题,所以我们在这方面还没有真正谈论过,关于并行算法的类。
例如采用一种算法并具有两种算法,工人在两台或两台以上的计算机上工作,这有点不合时宜,这堂课的范围也许有一天我们会坦率地讲授这门课的一部分,我们之所以不教您的原因是因为C ++的功能不是很好。
支持该时间步,因为他的加号是在大约同一时间做出的,我就是这样,无论我说什么是合并排序,都非常有利于,被多台计算机拆分和并行化,希望您可以,明白为什么我的意思是按字面意思划分工作,所以这只是一步。
删除以将一半的数据发送到其他计算机,看到这里,您对此部分进行排序,我将对我的部分进行排序,一旦完成,我们将合并,他们都回来了,所以这是一件非常有力的事情,基本上已经得到验证,通过查看它。
但我不知道您是否对此充满信心。
看这段代码,如果您直接转到此代码,我的意思是首先,坦率地说,关于递归还没有太多谈论Big O ,因为很难谈论您参加我们的一些理论课程,以为是109161,您将了解到称为递归关系的信息。
提出了103我忘记了哪门课程的内容,但是您会,了解有关递归算法的推理方法,运行时很好,这对我来说还不是很清楚,无论如何,你对这样的事情有直觉吗,好吧,这是我的尝试,可以让您直观地了解此循环。 。
一次执行一次此循环磁带以运行该循环一次,整个循环以完成重复,无论如何,请愿书正确地完成了每次重复所要进行的工作量,几个索引,加上印度的加号似乎并不算是一个常数,工作量还可以,所以工作是n我必须做几次。
这是一张横跨n的图片以完成其词,您可以想到它们,作为二维空间要完成的工作,您可能会说完成的工作量,每次通话,然后简短地说明通话次数或总次数,我们需要打的所有电话,所以实际上下降到多少,这堆电话得到。
如果你被二除以二除,你真正要问的是被两个元素除以一个元素,时间K除以Q得到很多东西的次数是一种,需要在这里进行的工作,这大概是为什么,事情需要n log n的Big O运行。
如果将它分成五分之六或六十二分怎么办,是的,我是说你,开始获得像以日志为基础的5或以日志为基础的信息,是因为任何日志都可以转换为其他任何日志,所以它只是一个,常数时间日志。
但实际发生的是如果您有这些多个工作人员,有趣的多个处理器使讨论变得更加困难,但是,让它变得更快更有趣,因为我没时间了,所以我必须停下来,在那里,但正在整理中,我将在星期五再见到你们,我们会谈。
关于继承非常感谢。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P24:【Lecture 24】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
因此,我们的最终审核会议将在下周四发布。 , 3月15日7:00至8:30 pm由Zach领导,和Noland或很棒的部门负责人,现在请出来370 , 370,他们将处理许多不同类型的问题,您将看到。
期中会有很多问题,这将不是视频。
录制好吧,让我们谈谈继承,所以继承是一种,与不同的类有关的方法,以及使之间的代码冗余最小化的方法,类别,并允许客户端对不同类别进行类似处理,这是我们将在周一回到的话题,其中一部分将是。
实施一系列建立员工系统的课程,彼此相关的不同类型的员工是的,所以继承,是表明两个类相关的方法,也是共享代码的方法,在两个或多个类之间以及层次结构之间,这是,继承是您拥有一个类别,而另一类别。
孩子一般来说,你上一堂课是什么样子,吸收其数据和行为的另一种含义,所以超类是,父类和子类是子类,所以基本上,通常看到的是,子类可以做超类可以做的所有事情,但是,它可能会做一些不同的事情。
也许可以做得更好,所以,一个例子就是我的G对象家族,所以您可能已经看到了, Java中的权利,但是我们也有C ++这些库,基本上,所有这些不同类型的图形,例如G椭圆形或G线或G标签,以及。
那么我们称之为G对象的所有不同类型及其优势,那就是你要说所有这些共同的行为,知道各种不同类型的图形可以包含某个点或具有,颜色在屏幕上有正确的位置,实际显示的内容不是字符串文本标签还是,线或矩形。
它们都将在屏幕上的某个位置,所以得到, X对Y的意义对所有这些都是相同的,但您也有,这些不同的子类可能具有独特的行为或可能实现,这些略有不同,因此G标签例如具有字体或具有。
您可以设置与之相对的文本对于多边形,知道多边形以Times New Roman字体表示是什么意思,正确,所以您会看到通过创建此层次结构,您可以利用一些,常见行为和通用代码,但您仍然可以实现。
特定于该类的自己的方法我们正在研究什么问题,你们都有关于继承的原因,为什么我们可能想要这样做,好的,作为这个示例的一部分,我们将实现一些,员工,所以所有员工都赚了48,就像所有这些规则一样, 。
真正重要的是我们只想为以下行为定义常见行为,员工,然后除了这些类型的员工,雇员的子类型,例如律师或程序员,秘书或专利,可以做额外事情的律师,因此我们将主要关注律师和,热情的律师。
因此律师可以做您可以做的所有事情,但是,他们也知道如何起诉人们正确的重要技能,律师专利律师知道如何起诉他人,也知道如何申请专利,如何通过归档文件使人们变得超级富有,所以我不会编写代码,所有员工类别。
因为您没有这些有趣的权利,时薪等,是的,这是我们的班级定义,好,那么您,可以想象我们的律师可以有完全相同的行为,他们知道如何,起诉,所以让我们写律师课好吧,所以我们的专利律师会尽一切努力。
如果员工知道如何提起诉讼并且知道如何向UM申请专利,他们就可以这样做,让我们写任何人看到这些类的任何问题你怎么办,说是的,这是很多相同的代码,所以通常在CS 106a和CS中。
106就像现在在您的CS Cruz中,您应该知道喜欢的代码,冗余,最好是我们没有教给你任何其他东西,例如代码冗余,是不好的,所以你知道如何分解成方法和类似的东西,尽量减少这种冗余,但是在这种情况下。
我们没有一个好方法,让您的专利律师能够直接检查员工,因此我们,拥有整个继承关系,这样您就可以拥有,利用这种共同的行为,通常看起来像,在代码中,你有上课,你知道你叫什么名字,就像律师,然后这样:如果。
Java关键字,他们不想让它成为某种历史的实际用词,原因,但他们因此使用了冒号,这只是意味着扩展了公众范围,然后,超类的,所以这看起来像是阶级律师向公众延伸,员工,这意味着现在每个律师都会自动获得。
休假表格中的小时工资休假天数,您不需要任何,该代码正确,它会自动具有它,您不需要编写那些,您不需要以任何方式更改它们的方法,这样您就可以,获得所有这些强大的功能,好吧,所以让我拉起吧,这是我们的。
原始的律师代码是正确的,所以如果我们将其写成公开表示,请知道,现在我们实际上不需要定义任何这些方法,因为它们已经,通过员工超类进入,然后在这里我们可以摆脱,所有这些代码-因为员工已经定义了这些方法。
所以代码将,就已经在我们身边了,所以我们创造的整个过程真的很酷,新型员工,我们必须编写四行代码,您问什么问题,所有人都有。
所以我们谈了另外两个话题,所以如果我们有你的,员工我们的员工是一个班级,然后我们的律师是正确的,那么您在哪里,您认为程序员应该如何考虑程序员,员工可以做的所有事情,然后还知道如何编写代码,所以您也可以。
想想有多少人对什么可能是一个好的超类有任何想法,对程序员来说,是的,所以我们可以把它放在这里,这样程序员就可以了,关于专利律师,所以是专利律师,做到员工可以做的所有事情。
并且知道如何提起诉讼以及如何提起诉讼,是的,所以在这里我们实际上可以将专利律师扩展为律师,因为您有专利律师会做律师所做的一切,并且,您隐含地知道员工所做的一切,只是添加了,功能,在这种情况下。
最好有一些东西,看起来像这样,而您知道拥有专利律师作为直接律师,将员工分类,因为您可以利用专利律师的优势,或抱歉,如果您能够利用律师的起诉方法,您的专利律师对此有什么疑问,所以这会导致明显的下一个问题。
或者可能导致明显的下一个问题,好的问题,所以这很好,因为我们的员工碰巧都拥有,同样的四种方法,然后我们只是扩展它们,但是,如果我们想让这些员工有一点点,具有不同的行为权利。
所以您知道并非所有员工都能做到,相同的金额,并非所有员工都有相同的地图假期等,是的,所以这是我们以前的同一个员工示例,但是现在您知道了,拥有一些额外的规则,所以您可能会认为很好,如果我们。
只是想改变我们的律师,使其具有不同的形式,如此直接的示例,其中有休假表格,应该返回粉红色,右边的黄色,所以我们先来看一下这个程序,这是我们的女佣,是的,好的,基本上你可以看到,像这样。
这是丽莎的雇主信息,我们实际上可以,使Lisa成为雇员权利,因为通过成为律师签证是,员工,这就是这种继承结构的优势之一,我们可以,在这里给这些打印员工信息打电话,好吧,所以看看他们有。
相同的信息很有意义,因为他们都是员工,所以您,如果我们想改变行为的逻辑性,可能会说好,事情就是让您知道编写我们自己的假期表格方法,所以问题,这是说它不知道休假形式存在,因为这是一个。
员工的方法而不是律师的方法,所以基本上,发生的是它正在尝试使用像律师,实际上并没有明确地说,哦,我们有这个,我们有另一个,一种叫做休假表格的方法,所以它不知道去看员工,那个假期表格的类。
所以我知道Holly可以查看错误消息,说休假表格的格外定义与中的任何装饰都不匹配。
律师好吧,为了做到这一点,我们必须做一个叫做“覆盖”的事情,因此,覆盖它涉及替换超类方法或成员函数,在子类中有一个新版本,这就是我们试图做的,以我们的休假表格示例为例,但问题出在C ++中。
您必须使用此,称为virtual的关键字,当您看到此方法时,它会告诉您类似的内容,并且,员工,您实际上可能不得不更具体地关注子类,弄清楚什么是实际的方法实现,这可能是一个方法,这被C ++覆盖了。
这就是其中之一,在此过程中,我们逐渐了解和喜爱许多有关C ++的怪癖,四分之一,基本上总是称虚拟的,从来没有真正的好,没有虚拟的原因,因此在超类中都应该始终是虚拟的,就像在任何子类中一样。
一旦您开始使用virtual就可以使用virtual ,到处都是因为它可以避免一些奇怪的错误,例如我们刚才看到的正确的错误,是的,所以虚拟只进入点H文件,然后进入点CPP ,就像平常一样,然后您还需要。
确保您在dot H文件中为律师声明了该方法,而不仅仅是,员工还可以。
这是说虚拟字符串休假表格,然后在这里我们想,说好吧,让我们虚拟化这个伟大,所以现在当您运行它时,编译,现在它由于某种原因运行,不是说这就是为什么,不好意思,请保持[音乐] ,抱歉。
我忘了宣布自己是律师而不是雇员,所以现在您可以在这里看到,丽莎是粉红色而不是黄色的,这很好地说明了为什么虚拟是如此,重要的是,如果我们在员工那里摆脱了这个虚拟环境,它不会抛出任何。
编译器错误它不会让您知道任何错误,但是当我们崩溃时,现在是黄色而不是粉红色,所以总是使用虚拟是的,好的,问题是,您是否必须在员工中以及在您和,从技术上讲,在您的律师中,您只需要一个雇员即可,就像。
Java如果您在Java中进行了任何继承,则方法会自动声明,像C ++这样的虚函数应该只使用虚函数,我可以,自动成为仅使用虚拟的行为,他们搞砸了,他们弄错了其他面向对象的编程语言,像自动使用一样。
只是将所有重写的方法都设为虚拟C ++ ,不太道德,这个故事只是使用虚拟的,如果不是那么多的话,额外的代码,这是使用您的班级的客户会想到的,希望是的,所以即使您,不要覆盖它们,可以将它们虚拟化就可以了。
,像嘿这样的编译器,我们将来可能会覆盖它,只是请注意一下,并确保是的,我们正在寻找最具体的,最正确的执行方式,好吧,问题是如果您想覆盖,传入,因此在这种情况下,两种方法采用了不同的参数。
实际上被区别对待,因此它们将被视为不同的方法,因此,您实际上无法覆盖传递给它的参数很大的问题,尽管您也,不能覆盖返回类型哦,是的,我们在后面是,那是更好的吗,先生,好的。
所以与我们知道的人一起工作得很好。
但我们也说过,我们的律师获得的报酬是,我们的程序员或我们的员工做得对,所以我们可以投入。
本来可以写这样的方法,只是说好吧,英寸的律师,您将其分别放入我们的律师,然后在这里我们说薪水,我们本来可以说还好80,000,但是这个问题,如果我们想让您知道通货膨胀发生了,我们想得到所有。
员工加薪3%或如果我们这样做的话,如果我们改变,雇员律师不会看到变更权律师仍会返回80,000 ,这意味着现在我们需要在第一步中在两个不同的地方更改代码,或者,我们欠律师的薪水都不是很好的选择,所以在。
为了解决这个问题,我们可以致电并利用员工的薪水。
方法,因此,如果看起来像是您将打电话给薪水,您必须。
指定您是在打电话给员工的薪资方式而不是律师,工资法,所以如果你只是说回报工资乘以2 ,递归的权利,我们知道这将错过一个基本案例的发胖时间,碰巧你会像无限量的钱一样付给他们两倍,因此。
只要您想调用超类成员函数,请确保,您将类名与冒号一起使用,是,好吧,问题是我们为什么要称呼这种超一流的薪水,在这种情况下,我们知道律师希望获得比正常人高两倍的报酬,员工更像非律师员工,并且为了获得。
值不这样,所以我们只能说好员工的薪水是40,000,所以,您将获得80,000的报酬,但是问题是如果我们要提高,每个人的薪水是50,000,我们仍然希望律师可以,他们要付十万而不是八万,所以如果你只是。
说我们然后需要喜欢在两个文件中而不是仅在一个文件中进行更改,是的,所以这就是为什么我们称员工薪水,所以如果我们改变,员工薪资方法中的某些内容会自动反映在,律师薪资方法,因此我们可以在此处进行更改。
以便员工薪资。
抱歉,好吧,问题是如果我们没有专利律师,我们还有什么,需要喜欢将所有这些变更从员工那里复制到律师那里,年龄,所以我们会因为想让律师拥有自己的,薪资方法您需要在点H文件中定义薪资方法。
问题是不等我们从上一个中得到薪水方法了吗,所以是的,但是我们没有从雇员点H覆盖的能力,所以,我们有H点员工的薪资方法,但是我们没有能力,覆盖它,我们还没有告诉计算机律师有更具体的信息,实施薪水。
这就是为什么我们需要像薪水方法那样,律师的点H档案,所以问题是您在两个,好的,从技术上讲,除非您要进行更改,否则实际上不需要律师,专利律师的行为,但这只是一种良好的编程习惯,一切都是虚拟的。
因为您可能正在写这名律师而没有想到,将会有一位专利律师,而有人则是,要去写专利律师课,或者他们可能想然后,他们试图使用您的类,您使用继承并尝试减少代码,冗余虽然很棒,但是最终您会知道尝试实现和。
覆盖这些方法,将无法正常工作,是的,好的虚拟,没关系,所以如果虚拟机确实可以告诉计算机没问题,我要拉起并在我身上弹奏,所以在这里你知道我们在通过它,像这里的员工这样的员工信息,它将打印出所有这些信息。
有关该员工的信息,例如工资和休假日等,如果您发生什么情况,我们将其称为员工点薪,没有虚拟的,它将总是像这样使用这种方法员工,是的,但是如果您将其定义为虚拟的,那么它将知道可以,我们需要。
寻找更具体的实现方式,我们将对此进行更多讨论,在星期一,当涉及到多态性时,声明为超级类型的相似对象,就像声明为,员工而不是律师,但是是的,它只是告诉计算机,就像嘿,还有更多的东西可能会有更具体的更好。
像去检查这样的实施,看看这名雇员实际上是一名律师, ,如果这样的话,请使用律师薪水而不是员工薪水,这真的很好,问题。
是的,好的,我们希望有一种不同的行为,好的,所以我们想让您知道子类的额外行为,例如,能够提起诉讼还涵盖了我们想要拥有不同类型的,员工有不同的实现方式,所以您希望向律师付款,现在更多的问题是。
如果我们想改变个人行为,这些类的实例不是所有律师都是一样的,不是全部,员工都是一样的东西,所以总的来说我们会有什么,为了使类的每个实例具有不同的行为而使用,是的,所以一般来说,您必须要有一个构造器。
这些不同的参数,好吧,我们只说我们有这里的员工,每年$ 40,000,加上每年$ 5,000的收入,这是一场不错的比赛。
在这里我们可以写我们的构造函数,所以说我们有员工,八年了,我们将让我们的私人耳朵好听,我的耳朵会宣布这一点,在这儿,我们等于您的耳朵,我们将为律师做同样的事情,我们给他们一所法学院。
他们也会得到一个建设者,好吧,我们也需要,要更改或使用它,我们需要将其更改为我的5,000倍,几年,然后我们需要改变通胀,我可以说这个人已经工作了两年了,可以说她去了。
到斯坦福就我刚才所做的更改有任何疑问,就像,实现的构造函数是的,问题是我在哪里可以听清楚,因此,我应该把耳朵放在哪里等于两年,这就是在实施,是点CPC的构造函数,所以基本上点H具有,构造函数声明。
然后点CPP实现它,而main实际上,使用构造函数,所以这些是我对问题的重大更改,好吧,坚持我大约两分钟,我们会看到出色的工作,是的,是的,应该没关系,让我们尝试运行它看看会发生什么,今天。
我只是向您展示很多奇怪的QT创建者错误,所以,说你们中有多少人见过x86架构找不到的符号, 64是的,对于那些在家看电视的人来说,您可能还在提高,举起这里的每个人都举手,所以我不知道你是否见过你。
可以去编译输出,所以这是说我没有,实施我的律师建设者来搅动我的法学院,好吧,让我们再试一次好吧,所以现在说律师的建设者必须,显式初始化没有默认值的基类employee ,构造函数,这回到您的问题。
所以它发生在这里是,每当您创建律师时,您也在创建员工权利,因为,律师是员工的子类,因此,要创建员工,您必须,将此员工构造器队列称为需要好几年的时间,并且,所以这里发生的事情是它不知道如何给员工打电话。
构造函数,因为您必须用很多年才能调用它,这是,有点微妙的地方,关于那个问题有什么问题,所以,问题是为了解决这一问题,我们需要更改构造函数,以便,输入员工的参数,是的,这是完全正确的,所以在这里我们可以。
像个我的耳朵一样,我必须在这里改变这几年,然后我们,员工可能不得不改变这一点,所以也许这个人已经工作了四个,几年了,所以让我们尝试再次运行它,它将仍然具有相同的功能,问题,因为即使我们给了它多少年。
我们实际上并没有,告诉它如何处理这几年的时间,所以这是个税。
看起来像这样,在C ++中还是冒号,但是基本上,构造函数,然后放一个冒号,然后将超类名称和,参数,以便调用超类构造函数,因此在这种情况下。
它看起来像这样,您可以说像我的耳朵员工,像这样的语法有什么问题,看到,现在我们可以运行它了,它可以编译,实际上现在您确实有一些,基于该人工作年限的可变性,因此,问题是有时您可以使用默认参数。
但我们会注意它在哪里,如果未传递任何内容,则会默认分配一个值,这样您就可以知道自己,可以做类似的事情,好吧,让我们不要拥有我们的员工,已用蓝色H停止了此操作,并没有花费很多年,而没有,这个年数。
我们会说没事,并且会默认,将其初始化为零,因为我们认为您雇用时没有任何工作,经验,所以它应该是可以的,所以它确实可以解决这个问题,实际上,每当您聘请律师时,您就想成为一名员工,并且,如果有意义的话。
可以用非零年数雇用员工,那么,同样有道理的是,像律师一样,可以聘请一名,非零年数,因此尽管默认参数将获得,我正在谈论的这个问题仍然不是最好的,解决大问题。
好吧,这是我们最后的律师,他们可以聘请其他律师。
他们可以起诉别人的薪水,这是我们实施的所有不同方法,重申一下,您有这个具有调用超类的构造函数,构造函数,然后确保在覆盖方法时,我们需要像那些超类一样调用我们使用的超类方法,在此处命名。
然后还要确保在我们的dot H文件中将virtual用于,我们的方法对继承机制有任何疑问,我知道C ++的语法确实很糟糕,但C ++搞砸了,但是,继承原理仍然相同,好吧,让我们谈谈继承的一些危险。
所以我告诉了大家,这种喜欢中间代码冗余并显示这些关系的好方法,在类之间,您可能会想像哦,现在我想在所有内容上使用它,也许不是因为您像哇,那只是很多垃圾语法,永远都不想去处理,但是在某些情况下,您不会。
想使用继承,所以为什么不与邻居交谈并尝试像,如果您想在这三种情况中的任何一种下使用继承,或者,你不会为什么为什么要很好地使用继承呢? ,我从未听过的安静对话我是你最安静的对话,听说过,好吧。
你们所有人都怎么看,有多少人认为您,应该对3d点和2d点使用继承,人们认为您应该这样做是的,如果这种幻灯片被称为继承的危险, ,你只是用那个那个正方形和矩形呢?有多少人,想你应该有多少人认为你不应该好。
排序如何, vector和vector应该并且应该都可以,所以实际上在所有这三个方面,案例继承不是正确的方法,因为基本上它会发生变化,预期的行为,因此,如果您在3d点上调用2d距离,将会有错误的举止。
因为您要合并, Z坐标是一个距离,因此您可以知道它是XY还是, 0 0,但是您可能像是在50英尺高的天空中,或者像是在空中,摩天大楼,因此您可能位于相同的XY位置,但位于不同的Z ,位置。
所以距离不应该更容易,是的,所以问题是,如果您执行点2d扩展点3d并将Z坐标初始化为0, ,会是一个更好的选择,因为那样的话您会少一些这种意外,行为,虽然您应该进入一个2d点就能像。
设定的Z坐标或3d点的某物,因此a应该是2d点,被允许具有该功能,在这种情况下,仍然可能,不是正确的方法,我们会回答这个好问题,是的,然后您的,矩形没有她的最新矩形,不应该有带有vs的集合。
隐藏一个对正方形实际上没有意义的方法,然后,排序的向量可能会使客户感到困惑,因为如果您说好的向量该怎么办,您是否可以在索引零处插入元素,然后如果我们返回,您知道,我们得到的下一行代码是我们打印出此向量。
其索引为,都以错误的顺序排列,或者您知道递归回溯有很多,像在矢量递归的开始处插入东西的过程,我们向量的开始,如果我们要删除的不是,我们添加的内容可能会引起很多人的困扰,因此, 。
所谓的Liskov替代原理,基本上就是,应该能够用其子类的实例替换类,并具有,相同的预期行为,所以我想提出这个问题的一部分就是这个,因为Barbara Liskov Sue的现象是惊人的,具有面向对象。
编程,她重新定义了人们对面向对象的看法,编程并创建了很多这些原则,这些原则真正指导了人们,今天上课的课程和遗传,她还记得我和Dijkstra谈论图灵奖时,是的,所以她也获得了图灵奖,只是她像。
她是美国最早获得计算机科学博士学位的女性之一,最早获得图灵奖的第一位女性之一,科学家,如果看不到我不知道我们可以在后面看到,但是说如果它看起来像鸭子一样嘎嘎叫鸭子但需要电池,可能有错误的抽象。
因为您不能用,新的机械鸭子,预期具有相同的行为,好吧,所以现在。
你们都在想,好吧,您了解了继承,然后我们,了解了这些危险,似乎没有一种很好的方法,如果我合法地拥有了我想要的所有冗余代码,该怎么办? ,利用您所说的关于2d点和3d的优势,指出并找到隐藏该行为的方法。
所以,记得我说过你不得不,你认识班级律师:公职人员,所以你也可以有一个私人,这是公共继承,这意味着客户可以调用任何,律师对象的员工方法私有继承需要您获得全部,代码,但您没有得到所有,如果有道理。
那么您就不会得到方法,你不是,如果我们要上课,客户将无法做到,律师私下扩展员工,您将无法打电话给所有,雇员对律师对象的方法,除非律师对象明确,定义这些方法好吧,因此通常我们会针对像,肮脏的向量。
我们可能想在索引处隐藏插入内容,如右图所示,或者在2d点示例中,如果我们有2d点,扩展3d点,则可能需要隐藏更改Z坐标方法, 3d点中的任何一个,这样您就不会选择将该方法公开,您是否有疑问,是的。
问题似乎并非全部,这么直观,为什么你会想在现实世界中基本上做到这一点,您可能想要像正方形和矩形这样的G正方形和G ,矩形将是一个很好的例子,因为您要隐藏以获取宽度,并获取高度方法,您也不想像矩形一样。
例如固定边长法之类的,因为那并不是真的,矩形很有意义,所以您喜欢,但您想保留,确实要,基本上有一个正方形的图,他在向右画一个矩形,是的,我正在检查XY内部方框,相同的是检查XY。
所以在矩形内部以及类似的东西,所以这将是一个真实的例子,您可能想私下,如果您要创建自己的犹太广场,则从grx继承,是的,好的,所以问题是这段代码实际上是什么样的。
让我们进入这里,假设我们私下扩展员工,首先是你不能做的事,你永远不能说好吧,我们不再,承认丽莎是雇员丽莎只是秘密地雇员,所以我们,因为程序员知道lisa是雇员,但客户不是,所以我们。
不能再打电话给该打印员工信息了,好吧,让我们打电话给她,员工并对此进行评论很好,所以现在它所说的假期是,员工的私人成员,所以现在就像放假一样,因为如果我们回到,我们的律师给您H点,您永远都不会宣布休假。
因此,您应该不休假,从员工进入律师的公共部分的那些方法中, ,属于律师的私人部分,所以就像私人助手功能,因此,当我们去这里时,您会得到像假期一样的私人身份,员工,这样您就无法实际休假给律师对象吗? 。
正是为了重申这一点,使得客户端只能调用,您希望它调用的方法,以便在有有害方法的情况下员工,你可以摆脱那是的,因此,假设您希望我们的薪水是基于实际的薪水时间-- ,例如假期3或有时,所以您可以说假期3 。
我摆脱了这一行,所以我们可以编译它,所以在这里您看到我们已经,实际上减去了30天,因为我们的休假天数是,内部使用相同的方式,只是外部不使用,就像您一样,可能写了一个冒泡或冒泡的方法来保持。
希望它曾经以某种方式组成,所以有点像你,可以打电话给泡沫,但客户不能打电话给泡沫,所以,问题是您仍然必须使用虚拟我知道虚拟就像真实的一样,拖动,但是从技术上来讲,就像您一样,不要因为好,所以虚拟的。
星期一,当我谈论要像打电话时说,律师是雇员,但是因为您摆脱了那种功能,您不需要那么多虚拟,是的,问题是为什么我们不需要说这样的话,所以不是,这么说是错误的,但实际上我们是在打电话给律师放假的日子, 。
律师放假的日子恰好是员工放假的日子,所以我们不需要,明确地说去员工休假,因为里面什么都没有,想与员工休假发生冲突的律师班,天你怎么说具体说明什么,所以我们在点H文件中这样做是说我们正在扩展员工和。
因为我们没有律师自己的假期方法,所以它将,自动使用员工休假日的好问题,如果您是。
感兴趣的另一种方法来解决这个问题。
直觉是所谓的构图,而不是像,好吧,我要你知道我是斑马或我是正方形,我要说的是,我还是一个矩形,或者我是某种矢量,我会说我是,也是一个向量,您只需要像一个向量一样保留私有实例变量,然后,只要您需要致电。
无论返回什么,您都可以进入索引,您的方法看起来像矢量狗,但无论您使用哪种实例,变量,因此,如果您对此感兴趣,那就叫做合成,是的,问题是您是否私下继承的实际上是什么样的,等于说好,所以我们私下继承了员工。
所以我们,公开所有员工的公开资料,基本上我们将其私有化,在这里,我不是构造函数,但其余的是,所以这些是,等价与否在逻辑上等价于概念上等价,是的,好的,这就是员工的状态,称此为私人并发布。
例如说可以私下扩展此,实际上不是那样写的,所以接下来发生的是因为我们公开,这里有优先休假的形式,所以我们有一个公众,假期大问题是的,所以问题是我们是否真的想让假期成为公众假期? ,认为这是一个国际假期。
所以我们要做的就是在我们的,博雅尔,我们不得不去律师放假的日子,然后我们就可以回来,员工休假日,这是一种非常常见的模式,看到我们只是将这个超类的方法称为我只想问的好问题,非常简要地介绍了C ++。
与其他面向对象的方法不同, Java或Python之类的编程语言允许您进行多重继承,这可以让您说某事是两件事,所以例如,输入流和输出流就在C ++中,因此您可以将其写为。
I / O流既是输入流又是输出流,它是一个,可以读取和写入流,这是大多数情况下的原因之一,其他编程语言没有这是因为很多时候人们,像好吧,我像婴儿班,我也像狗班,所以我想做一个,小狗班。
所以小狗既是婴儿又是狗,所以我将两者都延伸,然后突然间,由于婴儿吃得很饱,您的代码就中断了,与狗的饮食方式不同,而您的婴儿所发出的声音与,狗制造的,那么小狗应该拥有哪只狗,所以是的,基本上,多重继承。
您真的不需要这样做,很好,谢谢,你好,星期一见。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P25:【Lecture 25】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
好的,大家好,星期一快乐,星期十,所以通常我,从狗的图片开始,但今天我想我会尝试给你一些,最终的有用提示可能不像狗那么酷,但是嗯,第一部分是将从本周四开始的最终审核会议,在370370中,晚上7点至8:
30,我们不会录制下来,但是幻灯片会,在线,我将由SL Zack和Nolan离开,所以一定会出来,好的,另外,我们发布了一堆,练习期末考试与中期练习非常相似,建议您尝试做尽可能多的事情。
并且实际上喜欢坐着,做下来,因为它们与您将要进行的考试非常相似,您将看到的这些考试只是上一季度的期末考试,所以最好的学习方法是参加一些考试,然后尝试写作,找出问题,而不是仅仅编码并逐步编码,因为。
这是一种不同的经历,好吧,所以你会得到一个。
语法参考表看起来像这样,所以它与期中考试非常相似,参考表的两个主要区别是没有太大的区别哦,但您不会,询问有关它们的问题,即使您担心,您也知道所有这些,事情已经实现了,所以您应该能够弄清楚。
然后第二部分是我们已经添加了所有这些图形内容,因此您拥有了。
关于顶点边缘和一些伪代码,因此,我们为您提供了很多信息,就像上次考试一样,考试是公开的,时间,我们将让您知道我们上次可获得的20本书,如果您没有自己的书,就不用担心。
所以这是实际考试的样子,大概是十点,混合了阅读代码和编写代码的问题,因此您可能会看到,像这样的事情,您必须像进行二进制搜索那样记住,您希望在每次搜索时将数组分成两半,然后您可能会。
必须做一些选择选择排序合并合并排序的事情,您不必为此编写代码,但是您必须知道,了解其效果如何,以便您可以通过什么来追踪,发生,另外,是的,您可能需要做更多的合并排序操作,例如,链表读取问题。
因此请了解一段代码正在处理,链表,您还必须编写链表代码,可能,另一方面,请确保您知道练习过的,指针之类的东西,因为那肯定会在考试中,二进制搜索树希望您能记住它们,刺激将您从二分搜索树移至二分搜索树。
就像看那些幻灯片,如果您忘记了它的工作原理,然后,您可能需要做一些不必为二进制文件写的事情,搜索树,但通常是二叉树,因此请确保您,了解两次冲销的工作原理,并了解使用哪种冲销,因为几乎像大多数二叉树一样。
某些问题可以解决,遍历然后查看堆,所以您必须实现一个4pq堆,因此,请了解如何插入到堆中从堆中删除,整个冒泡冒着冒泡的东西图正确,然后去,通过了解图形的一些术语,例如什么是,连通图什么是有向图。
确保您可以遍历我们讨论的各种算法,船员学校将如何在这个老船员学校中工作,他分心,但就像BFS如何在这张图表上工作一样,Dijkstra的,在这张图上工作,然后您可能必须编写一个具有。
它需要某种图形并对其执行某些操作,因此请确保您,了解如何遍历边缘如何遍历顶点如何,您知道要写出您选择的搜索算法是因为您,可能会看到考试中的任何内容,然后是最后一部分,或者最后一次看到。
零件是具有继承性和多态性的面食,所以这可能是,看起来像这样,我们今天晚些时候会看到它的示例,所以,如果您还不知道如何解决这个问题,请不要担心,因为今天就是这样。
演讲是为了然后您可能需要做一些自己喜欢的事情,编写类的东西,以便了解继承的工作原理,作为像这样使用继承的客户,以及作为写作者。
在设计课程时,一些您将无法理解的事情包括,绘制分形时,您可能仍会看到递归或递归回溯,因此,为整个过程做好准备,就像多重继承的事物和私有的一样,我们上周谈到的继承不会在正常的决赛中。
公共继承可能会给运营商带来不小的负担,斯坦福图书馆的图书馆,直到今天,您在课堂上所看到的所有东西都是决赛的公平游戏,重点将放在中期之后的内容上,尽管这很困难,在不使用例如递归权限的情况下写树型问题。
因为,基本上,树从根本上是递归的,所以该类是按其性质,累积的,因此希望在链接列表树图继承中看到更多内容,这类事情,您对最终主题可能有什么疑问,在上面,你就像该死的,不到一个星期就对不起,我毁了你的。
星期一好的好的嗯是的,请务必参加审核会议。
很多练习题之类的东西,然后真的要花一些时间,艾米(Amy)也要参加一些实践考试,我将继续参加,办公时间本周正常,这意味着会有办公时间,星期四和星期五仅用于考试问题,因为,您的作业应在星期三完成,因此。
如果您有任何类型的,考试问题,甚至就像在外面闲逛一样,进行最后的练习,嗯,问题是,以前会不会有任何明确的东西,中期就像文件读取一样,所以文件读取不是像这样中期,被明确排除在外,所以我认为那是不好的。
最后,四分之一抱歉,所以您可能需要读取文件等内容,但是,不会像这样设置问题的方式不是吗,演示您可以读取文件,这更像是您需要使用文件,阅读图表或其他内容,是的,所以我不能这样做,您肯定会,需要知道ADT。
您肯定仍然需要过电流破坏,操纵那种东西,还有其他问题,好吧,让我们谈谈多态性,因此背后的想法。
这堂课是记住的,星期五我说有两种用途,继承是从类编写者的代码角度来看的,您获得了所有这些可重用的代码,因此您不必编写太多的代码,您自己的代码,因为继承时您只是免费获得所有这些方法,这是另一个很好的原因。
并且可能想要更好的原因之一,继承是客户端可以处理两个对象,以相同的方式不同,所以基本上这意味着你可以有一堆,举例来说,您可以说可以订购其中的每一种,会说话的动物,而每个动物可能会以不同的方式说话。
像其中一些可能会发出嘎嘎声或呐喊声,或者基于它们的鸭子或鸭嘴,狗,但您仍然可以打电话讲所有这些,因此客户不需要,知道好吗,我目前正在与狗打交道,或者我正在与鸭子打交道,只是知道这是某种动物。
因为它是一种动物, ,说话的能力,因此客户实际上可以在所有,这些不同的动物或更笼统地说,它可以在,一些基本类的子类,所以基本上就是多态,所以像这样的鞭子来自希腊语like poly,这意味着很多。
更合身和变形,这意味着形式,所以就像许多形式,这意味着,您可以在不同的对象上运行相同的代码并获得不同的结果,像这样的行为还可以,所以你可以这样称呼,在椭圆形的gee上绘制,在I和G rect上绘制。
它们都将绘制一些东西,即使如此绘制的婚礼有所不同,所以在C ++中看起来像是你有某种指针,这样指针将是超类,实际的装饰是,该示例的子类是第三个,因此前两个是从星期五开始的, ,我们看到了员工阶级。
就像员工,律师, ,专利律师和程序员,所以第三个实际上是开拓者,因此继承是在现实世界中使用的,在该世界中,所有不同种类的地图,例如地形和迷宫,以及所有这些不同的地图,世界的子类。
因此您可以使用它们中的任何一个,并以任何形式调用EMS ,这就是为什么整个虚拟事物如此重要的原因,如果您还记得的话,谈到我,我知道基本上有一些问题,虚拟允许我们做的是。
如果我们确实有像Edna这样的东西, ,当我们称Edna点薪时等于新律师,得到律师的工资定义而不是雇员的工资定义,这就是为什么我们将虚拟技术用于一切的缺点之一,继承是你不能打电话给任何律师。
是Aetna上的唯一成员函数,因为Edna喜欢编译器,知道埃德娜(Edna)是一名员工,只有在它实际运行时,会意识到这是一名律师,而不仅仅是一名员工,所以您不会,感觉这种情况太频繁了。
您会在我们的一些示例中看到这一点,对继承进行测试,但这并不是人们使用继承的真正方式,在现实世界中,有两种主要方法,现实世界是第一个拥有吸引员工的方法的世界,但您可以通过聘用律师,程序或专利律师来代替。
如果您知道这实际上是星期五的代码,您还记得我吗,指出了薪水和休假表格等所有内容,有点东西,所以这就是我用来做的方法,所以我没有,需要为律师和专利律师写一篇,程序员,我可以只雇用一个雇员,所以这是。
为什么您不能像这样的仅限律师的特定会议方式打电话,函数,因为如果您要尝试执行此操作,则必须,能够与任何类型的员工打交道,而不仅仅是律师,所以这就是为什么,即使您知道我们是否要聘请律师,就像我们知道那是。
律师,但该程序必须能够在任何员工上运行此功能,然后另一个常见的用途是您可能有一组员工,但是,该集合的每个元素都可能像一个更具体的子类,因此您可以,想象一下,这实际上可能类似于真正的劳动力。
看起来您的劳动力是由律师和程序员组成的,但是您,只会将它们放在一组员工中,所以如果您想做,像找到所有这些人的预算之类的,您可以称薪水, ,它会使用特定的薪酬实施方式,而不仅仅是通用员工。
薪水您对遗传有什么疑问或对多态感到抱歉,为什么我们要使用它为什么像我们通常使用它那样,好的,很酷,我是说你不能打电话通知你知道在垃圾上起诉,一个普通的员工,所以您可以回避的方式就是可以回去。
通过投射实现这种额外的功能,因此投射暂时是做什么的,改变,就像它暂时说这个变量的类型是什么,我将其投射到,编译器只会信任您,即使不是,实际上就像那样,它将相信你,所以那,对于那一行代码。
您可以将变量视为,随便你怎么做,在这种情况下,埃德娜都是真正的专利律师,但是如果,我们称您知道文件专利不是编译器也不知道。
埃德娜(Edna)真的是一名专利律师凯勒(Kyler)就像是我刚刚聘请的劳拉(Laura) ,埃德娜(Edna)只是一名普通律师,普通律师不知道如何申请专利,所以我认为Edna不知道如何申请专利。
但是如果我们告诉编译器,就像哦,埃德娜(Edna)实际上是一名专利律师,那么您就可以调用文件,专利,但您知道Edna的下一行代码不再,被认为是专利律师了,我知道它被认为是律师,好的,是的,是的。
所以问题就像你为什么不只将Edna称为专利,律师从一开始就与权利有关,所以这些都是,在我们显式创建这些指针的地方做了一些设计,可能会认为这是因为埃德娜(Edna)是的,就像实际上是一群员工一样。
所以您可能会有某种if语句,例如,如果Edna Edna是,真的就像您在Edna上调用一些函数以获取Edna的子类, ,那么您会说,如果Edna的子类是专利律师,则调用文件。
如果Edna子类就像律师或其他正确的东西,则该专利,情况会更多,您会看到它,而您不会真正看到它,像这样的代码是一个很好的问题,是的,所以问题就像你,检查什么是子类,我不太确定C ++中的硬汉,像我一样。
我确定有一种方法可以解决,在Java中我知道,就像是或的实例,然后您将其放在类中,然后在,对象本身,您也可以做一些事情,例如员工有一个,就像这样的方法会返回一个字符串,说明它是哪种类型的员工,以及所有。
子类的雇员将覆盖它,所以这是做到这一点的一种方法,以为还有另一个问题好吗,很好,所以请记住我是怎么说的,如果,你说一个对象,就像你说一个对象是什么类型一样,相信你,那是因为它假设你比,编译器的问题是。
如果您尝试将对象转换为某种对象,它本身不是某种东西,或者不是当时的子类,您会遇到意想不到的行为或崩溃,所以可能您的程序可能不会崩溃也许我只是做错了事,但您绝对想避免这样的事情,因为它会导致。
难以预测的非常难以预测的行为,因此,如果,您向一名程序员投了律师或一个律师对象,或者如果您投了一名律师, ,专利律师的律师,而实际上不是幕后的专利律师,两种类型的Rick都会这样,好吧。
我们是说埃德娜(Edna)是一名员工,好吧,然后是的,所以你可以说像这样,这很好,你可以,说这样的话,那完全没问题,因为所有专利律师,是律师,所以这有点像如果您还记得我在谈论这双嘴唇,咳嗽替代原则。
这就是为什么,因为你需要能够治疗,这些对象是的,它们是超类的,所以,如果我们不投,我们可以使用起诉栏吗?我们可以让员工留在这里好吧,好吧,如果它看起来像,你能打电话给苏,答案是肯定的,因为埃德娜就像。
编译器知道Edna是律师类型,因此您可以起诉,因为所有,律师们提出了一个很大的问题,好吧,我知道选角有些棘手,所以,还有其他问题吗,所以,我们将要做的其中一个例子。
跟踪如果在不同的位置调用不同的方法会发生什么,超类中类似子类的组合,所以我将其复制到,白板,我希望您能看到它不是很大,所以大,这里的要点是,每种方法都将始终被声明为虚拟方法,而我们不会。
在非虚拟和继承上对您进行测试,因为它很棘手,永远都不会,无论如何都要完成,然后我们不会尝试用输出来欺骗您,所以我们不会有像大雪一样的方法来打印泄漏三,或类似的东西不是我们真的试图测试您是否知道。
哪些方法被调用说我们可能在这里有类似的东西,我们在该方法内调用另一个函数的地方,在这种情况下,您,可能会得到一些不同的输出,但这是因为我们称此为其他,功能,就像这些规则适用于这些继承中的任何一个。
你会遇到的问题对考试来说是公平的,所以希望如此,您会看到,唯一棘手的就是我圈出的那个,因为它,调用snows方法可以,所以当您遇到类似问题时,这是一个很好的方法。
这是通过只写出像这样来查找层次结构开始的,继承,那么什么从什么继承而来,还要写下每个人拥有的方法以及它们是否被继承,来自超类还是不正确,在这种情况下,什么是顶级,超类雪权,这是不会继承任何东西的一种。
所以我们要下雪什么方法只是下雪帽,是的,两个和三个好吧,那是什么呢? ,工作人员睡得好,所以什么方法只是套件显式地编写自己,是的,对不起,这是它是否从雪继承了任何方法,是的,所以我将3放在括号中。
以便我们知道它是继承的,好吧,雪的另一个子类是雾吧,不对不起是雨,那是什么,明确写出了雨季的方法一和三,它继承了两种方法,下雪好了,然后雾是睡眠的一个子类,就像那样,方法一和方法二。
因此它继承了三个有关您的问题,是的,我不这么认为,除非我在黑板上写下了错误的内容,好吗,抱歉,还可以,方法3 ,而不是方法2对不起,让我更改,是的,明确的妈妈,我正在录制好电话,是的,我的。
漂亮的图表消失了,但是看起来像这样,第一次就可以了,你要做的是弄清楚班级是什么样的,层次结构是这样,我们知道它是父类,因为它是父类,那不是不是从任何东西继承而来,然后是snow的子类,雨夹雪。
我的意思是说,然后福格是雨夹雪的子类,然后你会怎样,从这里要做的是尝试找出每个方法明确使用的方法,所以下雪明确地写了两个和三个雨夹雪明确地写了一个和,二,雾明确地写出一和三,而雨水明确地写出一和三。
两个,然后您想弄清楚哪些是正确继承的,那么哪个,它可以访问,但没有明确地写,所以在这种情况下,每个,雪的子类将具有两个和三个,因此意味着雨夹雪必须,继承三个雨必须继承三个,雾必须继承两个我们都可以。
是个好问题,是的,所以问题是雾气何时传承-什么- ,是雾的继承者,所以它是从最多或最近的继承,会下雨夹雪而不是下雪的超类你有什么疑问,只是制作这张图,因此,让我们在如何解决这些问题的背景下讨论这类问题。
继承问题,所以如果您得到像您这样的东西,可能会在考试中,您必须弄清楚产生了什么输出,所以,你想做的那种方式是你要开始并看一下,声明哪个是等号左侧所有的蓝色类型,等号右边然后右边是初始化的类型。
这是一种水果,所以如果您看向左侧,您想看看该变量,有这种类型的成员,雨夹雪也有一种方法,这种情况下确实如此,所以不会出现编译器错误,然后您就关闭了,看起来不错,那么初始化类型是什么,等号。
在这种情况下是雾,所以你去看雾方法一,好吧,好吧,现在回到您的问题,如果您有问题该怎么办,像其他函数调用和符号一样,这有两种,您可以拥有的函数调用,因此第一个是您喜欢的地方,此处的类名称,在这种情况下。
请转到该类并执行该类的代码,如果该类没有这样的代码,比如说我们叫yeah,比如,我们称之为下雨或抱歉,让我们称之为雨夹雪的方法3,因为,我们继承了没有积雪的方法,就像积雪方法3一样使用。
因为那和sleeps方法3一样,因为sleet继承了它,如果只是说方法3您使用初始化的类型,则没有类名,方法,所以我们从哪个类调用它并不重要,您决定,所以您要么让库蒂斯喜欢这样的问题,例如,您可以跳出。
像你这样的继承人可以像雨夹雪一样叫这里,答案是否定的,因为它们彼此之间没有直接关系,所以打电话无效,如果你有点像你的话,那似乎并不正确,可能像geo Ville这样称呼它,可能是一个round函数。
或者是,如果宽度和高度相同,则圆形功能就正确了,从矩形中调用它,因为那没有意义哦,是的,所以问题是这是我们之前所做工作的延续,并不重要,这就像是一种方法,这些类还可以,所以问题是如果我们试图调用方法。
三个和正在编写的类或类循环这是一个方法,没有方法三会发生什么,所以在这种情况下,您将使用,这个超级类方法三,就像您说的那样,它会自动,值得,因为像子类这样的吸气具有所有,超类确实知道。
所以它不必调用snow:或其他任何东西,使用那个um之一,那么问题就像我们为什么要这样称呼, snow:而且我们这样做的原因是有点像我们在做什么,上周我们希望律师的薪水是律师薪水的两倍。
像我们这样的员工,我们可能会尝试调用一种特定的方法,因此,你是从哪里来的,所以有一个问题,当您调用方法二时,您仍然调用虚拟语句吗? ,在这种情况下,您将始终执行snows方法2,无论是否。
snows方法2是虚拟的还是不是虚拟的? ,在方法三的情况下,您总是调用初始化类型的方法三,所以等号右边是什么,你只会,在该类中具有虚拟继承,因此您不必担心跳,非虚拟是,好吧,对不起。
所以你说甜蜜的星星B等于新雾好了,然后你,说一种方法好吧好吧所以在这种情况下, [音乐] ,除了您已经在乎之外,您是否已经从中继承了所有方法,您的超类中的方法像雪一样调用的唯一原因是:电话是否。
您想专门在雪中像这样的代码进行调用,我们认为,可能在您想要的任何时候都被覆盖了,实际上是snow的方法三,而不仅仅是通用方法三,会叫雪:方法3是的,问题是你能给一些吗,发生编译器错误的示例,如果您有。
像v2之类的雪星等于新雨夹雪,然后如果我们想,像方法2一样调用v2箭头,这将无法正常工作,因为没有积雪,一个正确的方法,所以编译器会像哦,大雪没有方法,一个,所以我不会让它编译。
因为我对这个变量的了解,是雪的类型吗,是的,问题是这样,那么读到的情况就是睡着了, ,完全可以,所以这个问题让我们假设雨夹雪像这样,其他如何解决编译器错误的方法,这样您就可以。
围绕它进行铸造或与您永远不要调用对象的方法,被声明为snap类型,因此,如果您要使用方法,则可以,您将变量的类型设置为sleet,而不是,左侧,是的,那就是我完全一样。
我们就像您不能以非权利和雇员权利要求提起诉讼,起诉被宣告为类型律师的事物,是的,完全相同,是的,是的,所以您不能在B 2上调用方法1,因为编译器将执行,对,所以问题就像一个已经准备好的问题。
它将写成相反的意思,其实,所以问题是一个类可以从C ++中的两个不同类继承吗,但这很罕见,是的,很酷,因为它进入了非常奇怪的行为,就像两个类都有一个方法一样,哪个方法要您使用,我也要做一些例子。
所以我们谈了一些有关类型转换的内容,但是如果您有一个类型路径,那么发生的事情是声明的类型变为,不管您放弃了什么,所以如果您知道是否仍然没有强制类型,该方法,如果将其强制转换为。
这实际上不像是如果您将一名程序员投给律师,那么您会得到,然后像这样的编译器会崩溃,所以唯一的方法就是崩溃,是通过强制转换,然后假设您不崩溃就不会得到编译器,错误,您仍然执行对象初始化类型,因此如果您。
将专利律师投给律师,然后提起诉讼将其称为,专利律师起诉而不是律师起诉,好吧,是的,基本上这只会防止编译器错误,不会改变,输出,除非类似它可能会导致崩溃,可以总结一下。
我们一直在谈论如果您看到这些代码行之一, ,您要说的第一件事是变量强制转换-如果是,如果强制类型是超类或与初始化类型相同的类,所以等号右边的东西,就像我们刚才说的那样,现在。
如果声明类型不是Casta类型,它将立即崩溃,所以如果,我们试图将睡眠蒙上一层雾,然后它会崩溃,然后我们说,声明的类型或超类定义了我们正在查看的方法,所以您知道,如果我们想给睡眠打ack 3。
我们会说只是下雪或雨夹雪,方法3,如果有,那么我们使用右侧的初始化类型,等号的一侧,我们运行该类型3的方法,否则我们有一个,编译器错误,所以它只是总结什么总结就是为什么我。
在上一张幻灯片中一直在说您对此有什么疑问,是的,如果您使用xavie方法-在这种情况下,我们会说雪有没有,因此V不会下雪吗? ,然后我们会让我下去雾气,说什么是雾气方法-是的,问题是这样的。
所以我们有一个雪和数组,然后我们将其投射,雨夹雪,雨夹雪不是我们继承树的另一个分支,等级然后下雨是为什么为什么这个工作它实际上不起作用它是,就像一个例子,你会看到这样的事情,所以输出,实际上是会崩溃的。
所以初始化的类型是rain ,类型是雪,转换类型是雨夹雪,所以您可以将雨夹雪和,雨呀,所以问题是,这只会崩溃而没有编译器错误,所以您,首先会检查编译器错误,就像我们有一个方法,这样做会导致崩溃。
所以我们还要做一些例子,好吧,假设我们有这样的事情,那里有雪和雨,我们,要调用方法一,那么声明的类型是什么,所以我们的声明类型,是下雪了什么是我们的初始化类型是是好吧好吧,雪有一个方法没有。
那么会发生什么是的编译器错误好吧,让我们,说我们有这个VAR 3,所以我们的声明类型是什么,好,我们的类型是什么,初始化类型好,斯诺有两种方法吗,好吧,我们要调用方法二。
所以我们在这里讲到范围方法是什么,二,它会打印出雨水,好吧,好吧,如果我们要,这样的东西,所以我们的声明类型是什么,我们初始化的是什么,输入OK,所以现在我们说OK,方法一,二。
雪有一种方法-所以我们继续使用冰夹雪的方法-这样就可以了,一,您对那三个到目前为止有什么疑问,是的,所以这个问题,是当您调用方法2时,它只是知道要入睡,是的,这完全是morkul ,禅宗就这样,好吧。
现在让我们进入一个铸造示例,因为我们下雪了,所以我们声明,类型是下雪吧,我们的初始化类型是下雨,我们的班级类型好吗,所以下雨好吗,所以首先要这样做,谷物有一种方法是可以的,所以不会是编译器错误。
一个子类或与rain相同的类是好的,然后让我们将方法称为,因此,所谓的“是下雨”方法会打印出来,下雨一个好吧,所以初始化初始化就可以了,我们的种姓是什么? ,然后是雾是雨夹雪的子类或同一个类。
有一个好的方法,所以这不是崩溃,也不是编译器错误,所以,当我们调用方法一时,我们将雾方法称为一,所以打印出来的是什么,是的,这个问题好吗,所以问题是,就像为什么为什么打印出雾而不是雨夹雪,所以铸造不会。
更改初始化类型,它仅更改声明的类型,因此没有,喜欢使之称为雨夹雪而不是雾的方法,这样做是为了像实际制作一个类型为sleep而不是a的新对象。 ,输入fog,这样投射不会改变实际的输出,它只会像。
所谓的合法通话基本上就是不更改该对象,在幕后只是说这是一种什么样的做,如果对不起,哦,如果是这样,就像甜蜜,那么我们可以做这个吗,下雪了,是的,你可以做到的,知道的是正确的,所以问题就像你可以。
这样做是的,因为您仍然会问,喜欢的问题是雾是子类还是雪,是的,snow实际上没有方法一,所以这将是一个编译器,但它将,是编译器错误,因为方法一件事不是因为下雪和。
sleet ding有意义吗是的对不起,清除初始化的Sarika缓存是的,所以有问题吗,使该对象执行sleet方法的任何方法我都不认为,我很确定没有办法让这个对象执行。
请一种使雾气消失的方法一叫睡眠方法一,还有几个问题,所以真的很简单,这个很抱歉,一个声明了初始化的演员表,所以是因为初始化传递了初始化类,与铸造班级在树的不同分支中,这将是一个迷恋,然后在这个例子中。
如果我们要有一个方法称为何时,我们调用方法,因此在调用时这里声明为已初始化,八号酒吧的方法,您将去睡觉史密斯和财富希律王,下雪,这样就可以打印出雪,之前下雪,然后它将调用方法二,并且将调用糖果,方法二。
因为在后台该对象是一个雨夹雪对象,所以它是,如果您有任何疑问要见我,请不要下雪,多谢您,下课后是的问题是,如果雨夹雪没有方法-那将是。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P26:【Lecture 26】CS106B, Programming Abstractions in C, Win 2018 - 鬼谷良师 - BV1G7411k7jG
好吧,我们现在就开始吧,大家好,我叫艾莉,我是,斯坦福大学的学生我也很高兴教授一单元C ++ ,我们提供的称为CS 106 l的课程,基本上是,十多周涵盖了行业标准C ++ 。
编程以及与现实C ++相关的所有这类概念,因此,今天,我认为马蒂和阿什莉很友善,让我今天写信,因为,他们看到了价值并涵盖了学习实际c ++背后的重要性,除了您在这堂课中学到的概念之外,今天我们。
将会获得关于we ++的概述,以及它在现实生活中的外观和排序方式,您可以带走一些概念,因此,如果您确实遇到了C ++代码, ,现实生活中,您会知道如何在游戏中导航,今天的计划。
我们将从简单介绍一下我们开始,今天要做的事,然后我们将深入研究一些高级C ++功能,像模板,我们将讨论标准的C ++集合,向量图和集合的类似物的种类以及所有按实际顺序排列的,我们。
然后我们要谈论的东西叫做整数和算法,如果有时间的话,还有其他一些简洁的功能,然后我们将尝试看看,日志中的实际C ++代码,因此我们将找到一些,有趣的样子,看一下代码的外观以及我们是否愿意解析它。
以任何方式都可以,所以在我们开始之前,我想给,免责声明您今天所学到的一切,请不要在最终版本中使用,考试,因为我们花了10个星期来研究这些概念并学习,细微差别,因为就像您可以轻松地在脚上射击自己一样, 。
以此作为对未来的指导,而不是应该用于考试的内容,所以不要使用任何,这些事情还可以,所以在我们开始之前,我认为将其分类是一个好主意,花点时间思考一下自己的去向,知道所拥有的,如果您还记得自己是第一个。
则在这十周的过程中完成了,在106 B讲座中,您被告知您知道自己找到了iostream, , int主要事物,您可以看到hello world,然后为某些对象打印hello world 。
出于某种原因说出某种叫做“内在”的东西,那么你就来了,这样,您现在对所有这些不可思议的事物有了透彻的了解,诸如递归图算法之类的编程概念,您知道该如何使用,向量,地图和链表,您知道如何使用,堆放在堆中。
您会知道所有这些都非常令人难以置信, ,你想起来这真是令人惊讶,十周之内,对,所以在一到六个我的末尾,重要的是要意识到,就像所有这些有用的令人难以置信的想法一样,实际上以任何方式特定于计算机科学。
因为您知道自己正在学习,如何系统地解决问题您正在学习如何解决,现在有系统地使用计算机解决各种问题,尝试解决那里的问题,我认为您需要教授两到三件事,我是想对我说这句话,所以您需要了解如何解决问题, 。
在课程结束时,你们都已经完成了,您将知道如何解决,您需要有一个好主意或想要解决的好问题的问题,以及,那么您在计算机科学中需要做的最后一件事就是使用一种编程语言,解决它。
所以106 B的目的是要学习艰巨的挑战性概念,解决问题的方法,但是发生的事情是很多学生离开了,类对编程非常了解,但也许,就像他们没有标准的语言来编程,然后他们进入,采访大写字母V中的正确向量,然后。
面试之后,那是什么权利,没关系,但有些,面试官,有些面试的确很重要,所以重点是,其中之一是Excel,该类将成为该类的编程语言,这三个步骤基本上可以,所以在我们开始之前,也许这是一个好主意。
谈论为什么我们应该学习C ++,所以通过这种cookie ,但是um Cephas vs。真的是很棒的语言,让您以自己想要的任何方式喜欢程序,它是面向对象的程序之一,如果您想像C一样使用它,就可以做到。
您可以做到, C ++中的函数范例也是如此,但总的来说,它只是一个非常流行的。
语言就像是该索引列出的最受欢迎的语言列表,编译过的C ++始终是前五名,它是最受喜爱的语言之一。
堆栈溢出,它使用的速度非常快,就像您可以看到的公司一样,一堆大牌,基本上每个浏览器都使用,编写使用它的软件,它实际上用于实现Java运行时,所以这是一个有趣的事实,你知道她在游戏和其他非常酷的系统中。
相关的事情,所以尝试和学习真的是女孩不可思议的语言,我会激发我们今天拥有什么样的出色功能,每当您有疑问时,请随时阻止我,我要走了,今天在我的网站上有更多资料,我认为我们可以涵盖,因为它是十。
一类的几周浓缩成一个星期,所以我们可以在任何地方去,感觉还不错,所以我们从谈论这个开始,真的很酷的C ++功能,因此,模板和我们将从激发这一点开始,有问题的想法,所以我们将看到人们从中遇到的问题。
使用C ++导致引入了此功能,所以这就像,这个场景是我们要玩的游戏,所以假设您正在做,进行某种编程,由于某种原因您决定,您需要一个最小的函数,该函数需要两个整数并返回较小的,这两个整数不时地出现。
就像做一件合理的事情,我告诉你如何很好地编写此函数,你会有一个函数,它需要一个int a然后一个int B,然后如果这个符号不熟悉,很好,它只是说如果a小于b返回a,否则返回B好的,所以。
简明扼要地这样做是因为我的幻灯片上没有空间了,所以,真的很合理,我们使用此函数可以传递3和5的最小值,告诉我们3是13的最小值,而8是8的最小值,如果我们通过,一个1。9和3。
7的人当我们这样做时会发生什么,需要两个整数的函数,我们将其传递给加倍的函数,对那些整数做吧,是的,truncus正确地将它们减小到整数,所以,它得到1和3,然后返回一个较小的值,右边是1,所以这是。
有点问题,您决定好吧,我也想找到最小的小飞象,加倍,所以我该怎么办,也许我会去写另一个,函数需要两个双打,所以在某种C字中,您会做什么,您将拥有两个具有相同名称但参数类型不同的函数。
然后根据您传递的参数确定要调用的参数,因此,如果我用两个双打给男人打电话,如果我通过,将叫第二个双打。 ,赢得两场胜利的人,我会称第一名,你可以继续这样做,对于其他类型。
您知道可以设置为int或min的double或min。 ,大小T ximena浮动字符的运行范围,在最小点处您知道的字符串的最小值,你必须停下来说好吧,这是不合理的,我想做的事情的编程模型。
所以这样做的问题,这样的事情是,你基本上有这些, -所有功能完全相同的副本,唯一的区别是,变量的类型以及每次您要添加新类型时都需要,添加您需要继续并复制粘贴,该函数会将类型更改为,不管您想要什么类型。
如果您稍微编辑功能,就说您,想要小于或等于而不是小于您必须去每个,这些以及用小于或等于它替换小于的权利,所以这不是很稳定的编程方式,特别是如果您有更多的话,复杂的方法,所以在C ++中。
设计师的想法就像,这样的代码确实有很大的不同,所以我们来看看这是什么样的,所有这些实现之间的根本区别抱歉,是的,好的,所以是的,就像主要区别一样,如果您看的话,那只是正确的类型。
似乎类型是此函数之间唯一的改变,所以如果,就像有更好的方法可以做到这一点,具有某种通用类型的功能,这就是那种想法, C ++中的模板是模板,实际上只是功能的蓝图。
这样您就可以将这个确切的函数用于不同的类型,这样思考,关于我们如何在主要函数上编写代码,我们仅更改类型,因此如果您看,我们有主要功能,就是用双精度替换末尾,然后,我们有它的另一个版本。
所以在C ++中使用模板的想法说,将为编译器提供此模板功能,并告诉其具体部分,什么特定类型应该是通用的,当我们在其中使用时应该替换,一种特定的方式,这样的样子让我们说我们有最小的功能,再次在int上。
我们要做的是使它成为通用模板函数,因此,与其说让我们通用,不如说,输入T即可随心所欲地命名为T ,好的,然后您要做的就是告诉编译器T是泛型,所以,只需完成这两项操作,您便有了一个min函数。
该函数可以在,任何类型基本上都可以,如果您这样考虑的话,它真的很强大,就像您如何使用此示例一样,假设我们已经编写了此分钟,照原样显示函数,可以指出要调用的函数的类型,在尖括号中指定它。
所以说我有两个整数,我想,使用我的模板函数查找这两个整数中的最小值,类型为int的人替换了模板参数,然后调用,就像一个功能,如果我加倍,我可以做同样的事情。
使用template参数键入double来调用min,然后将其称为, env好的,这是如何工作的,就像一个有趣的事情,问题也是,假设您是编译器,并且您正在查看,代码,并且您在这一行上说的很好。
用户声明为int + int a equals , 3并且B等于9很好,我可以这样做,然后编译器转到,这行代码说我没有min int函数没有人定义mini , int函数在任何地方都可以。
但我确实知道如何制作一个,有人告诉我给我一个千篇一律的模板,此功能应该如何,寻找任何类型,所以我只需要像替换该类型的类型,那会给我我想要的功能,所以它的作用就像从字面上看,从字面意义上讲。
它需要此模板功能,然后生成,用T取代它的功能,好吧,所以当您,实际上大部分时间都使用此功能,您也可以省去尖括号,因为它会根据参数的类型推断出您正在调用的版本,大多数时候。
所以您真的很喜欢看起来像故障的东西,但是到目前为止,对于任何类型的问题都适用,不好意思,是的,所以问题是,如果我们打最小电话时说三,还有两点九,因此您将使用不同的类型参数,这是一个很好的问题。
所以要么像两个合理的,猜测一个是它将一种转换为另一种类型,或者其他不是,会优先出现,实际上它在不编译的情况下播放,因此,不会做任何意外的事情,您会说模棱两可的呼叫无法推断出,模板或类似的东西。
这是一个很好的地方,是的,所以这是一个,还有一个很好的问题,问题是我们是否要回到这里,如果我们传入没有比较运算符的两种类型该怎么办? ,编译器不会这样做,因此答案就像在两张幻灯片中一样,但是在。
简而言之,它将无法编译,因此具有模板功能的东西,很棒的一点是,嗯,这种隐含的想法是,任何类型的,实例化您的模板,因为它应该能够使用您使用的模板进行的所有操作,对于该方法,因此在此方法中。
我们正在比较两种类型,因此,如果您将其传递为无法比较的类型,则不会在相同的条件下进行编译,如果您通过,则在该通用方法中增加一种类型的方式,它是没有增量运算符的类型,则不会编译为一个。
那就是所谓的模板的隐式接口,唯一可以使用的类型是模板函数,满足隐式接口,这基本上是如果您替换此类型t ,与实际类型,您想使用代码编译的内容以及是否使用,如果没有的话它将编译,这实际上很重要。
这将与我们稍后要讨论的内容有关,关于模板的任何其他问题,这也是一个非常好的问题,实际上,这相当于,这个骇人听闻的事情,您需要对方法中的类型进行操作,仅适用于某些类型,因此不会针对其他类型进行编译。
大致相当于那个,但是以一种更优雅的方式,但是是的,您可以,绝对好吧,好吧,让我们检查时间吧,好吧,嗯。 ,因为你们所有人都不是,那么您在哪儿看过这种记号呢? ,你喜欢这些尖括号,然后告诉它一种,是的。
所以当您制作矢量或地图时,您也会执行类似的操作,对,你说矢量尖括号到矢量我回括号,字符串,如果您曾经想知道它是如何工作的,这个想法与模板函数完全相同,只是它被称为模板化。
类和and的外观基本上就像我们概括的一样,函数可以执行任何类型的操作,也几乎可以将类归纳为任何类型,完全相同,几乎没有其他怪异的实现,但这是,在道德上是相同的想法,例如,我们今天要看的是你。
几周前您第一次学习记忆时,将其写成一堂课,管理,我们将讨论如何使阵列堆栈起作用,不仅适用于整数,而且适用于任何类型,因此您拥有此数组堆栈类, ,有一个推方法,然后还有其他一些方法,所以我要告诉你。
您将如何使用模板作为此类的眼睛,而不是仅仅进行操作,它可以在任何类型上运行,并且想法很相似,所以首先我们,有一个点H文件,然后是我们的点CPP文件,而且我现在只看其中一个功能,但是好的,所以。
您要做的第一件事是我们对函数所做的事情,而您替换了int ,与一般的泛型类型说T或值类型,我称之为值类型,因为我认为这是一个明确的名称,然后您就告诉编译器,值类型是通用类型,可以在类的开头添加以下代码:
,它在称为值类型的这种类型上进行模板化,然后您必须,在CPP文件中执行相同的操作,您首先需要更改,数组堆栈对象为竞速值类型,然后在此函数之上,实现中,您还必须说值类型是模板化类型,因此它是,有点烦人。
对于每个函数,您都必须为其加上前缀,模板类型名称值类型,然后将您的种族标签更改为种族类型值,键入好吧,所以我猜有一个错字,因为这也应该是值类型,但是忽略那好吧,然后要做的最后一件事是。
烦人且没有意义的是将所有CPP文件移动到,点H文件并删除see Felicia,因此出于某种原因将模板和,编译C ++的工作意味着您不能在接口之间拆分模板代码,和实现,它们必须一次位于同一点H条中。
曾经看过斯坦福大学的收藏,所有矢量地图和东西都在,点H文件,没有适合他们的CPP文件,是的,所以我认为。
如果我们只是看一下此代码数组堆栈,然后,模板看起来有点或完全不对,所以我想作为一个更新,数组堆栈,它是由堆分配的数组支持的堆栈,因此我们有一个,具有大小和容量的int数组,称为element 。
我们有像push pop peek这样的方法是空的空字符串方法,所以这是怎么回事,被使用是我们有一个主要功能,我想那不应该在那里,我们有一个主函数,它创建一个数组堆栈,将一些整数压入其中。
我认为有些事情还可以,所以我们要做的是使这项工作顺利进行,这样我们现在就可以推入了,如果我叠放推入,我们说一串,它不会编译,因为它表示您正在尝试插入字符串,它期望在正确的位置,所以这不是通用罢工。
它只将其堆叠,为此工作,所以我们要做的是转到dot H文件,然后是模板Isis,所以我们要说的是,模板化的类,并且在此类型上进行模板化,调用值类型还可以, 。
那么让我们以交互方式进行这种操作我应该将什么更改为,值类型在此B值类型在此方法中的任何内容,是的,所以Inc ,需要是一个值类型,因为现在它在通用类型上运行,那么pop好吗。
所以它应该返回一个值类型peek应该返回一个,值类型,它仍然应该是布尔值,因为它只是检查它是否为空,这仍然是一个字符串,我们不再需要一个int数组,想要一个值类型数组,然后进行大小调整,谢谢,好吧。
所以,所以我们的模板是基于值类型的,我认为这些都是变化,您需要在此处进行操作,除非我们现在必须转到CPP文件并进行,也会发生变化,所以如果我们转到CPP文件,我们拥有所有这些东西,所以请记住我们。
需要每个人都模板化眼睛,然后说它不是数组堆栈,而是,值类型的数组堆栈,而不是数组类型的sty类中,数组堆栈值类型类,然后我们要在上面复制此模板内容,他们每个人都要做,所以我会很快做到这一点,好吧。
然后模板模板好酷,那就是,几乎,我们只需要再做一件事,对不起,这应该是,价值类型提示要做价值价值类型是您累了吗,我们必须,要做的就是将所有这些代码移至CPP文件,然后移至H文件,因此我们将转到。
下课后的底部是照顾,然后将它扔在那里,然后,我们将删除所有这些,也许可以删除文件,现在代码是,编译,但是很抱歉,是的,是的,是的,非常好的值类型,结果正确,好极了,谢谢,好,这时确实编译了,但是。
它给出一个错误,指出使用模板或堆栈需要模板,论据,因为现在我们已经概括了它,我们找到了一个,堆栈堆栈,我们需要说射线堆积在库存中,然后他们将进行编译并。
他们的工作应该与以前一样,好的,很酷,关于这个的任何问题,好的,所以。
简而言之,基本上是模板化类的一些细节,您必须将所有内容移至该年龄文件,然后在所有内容前添加前缀,带有模板类型名称和一些奇怪的语法,但这大概是个主意。
如果去斯坦福大学图书馆藏书,那是一个向量, 。
您看到的第一件事是将值类型模板化,并且具有,构造函数以及所有这些东西,实现在刺猬中,就像你可以理解的东西,好的,很酷,这是一个主题,现在我们将移至下一个主题,好的,所以嗯,您一直在使用这些东西。
矢量和地图,我想排长队或使用十周,是的,所以我只想,指出这些不是C ++和标准中的真实概念, C ++那些确切的集合或多或少地存在,所以有标准的C ++ ,具有一组包含这些容器的类和算法的库。
小写矢量上的类小写映射小写集和这些算法,排序查找,我们将在稍后讨论,还有斯坦福C ,与集合的行为几乎就像标准集合一样,除了您知道,如果您只是将标准C与集合进行交互的话,确实非常不友好,从编程开始。
所以如果您超出范围,则只是简单示例,向量如果您超出范围就不会崩溃,并且您知道它可能会崩溃,崩溃是因为您破坏了内存,否则我只会工作而您永远不会知道,因此,斯坦福CSS集合可以有效地执行基本标准。
C ++连接可以做到,除了它们具有更好的错误消息并且它们,使用起来更简单,这是因为就像您是C ++ ,编程,您需要采用某种范例,而我们不想,浪费时间,并教会您以前应该集中精力的时间,关于概念的学习。
所以只是一个总结,所以我们在斯坦福大学,左侧的标准位于右侧,标准中的STL中没有草类,图书馆没有好处,有一个哈希映射,称为无序地图哈希集有序集向量它的通知向量已链接,列表没有案例列表MATLAB说。
是的,我们也有,优先级队列,它是小写右EQ等,所以像这样,标准中通常存在字母中的三角形或套管,库好吧,还有一些方法上的差异,但是它们。
并不是很大,但是如果有人想在他们的书中查看它,我可以在这里参考,自己的时间,所以左边有斯坦福矢量,右边的标准向量,除了看起来不是,堕落的父亲终结了某些事情,我们称之为,向后推。
因为我们将其推到您要获取的向量的后面,一个元素,其反弹的标准向量默认情况下会检查标准,如果您在一点跳动检查处调用Vida,向量不会。
与插入相同的东西,然后您基本上可以进行其他所有操作,就像面试中最大的外卖一样,不要打电话,不要打电话推回,你看起来像是知道秘密,更快,您很快就知道了,因此,例如,我们只是使用,斯坦福大学矢量图。
我们要把它转换为第一件事,做的是小写字母V包含我们,所以我们必须包含标准向量,用尖括号将库向量我们小写,更改爸爸执行的推回操作,请注意我们在索引0处有V点插入值, 42。
现在我们在V点插入了一个称为Lead的东西,然后,我们将在第二个斯坦福向量中讨论的值42为V ,不要删除索引2处的值2,然后在此标准向量中,让领导者擦除,然后再次开始,然后再加上2 。
我们稍后再讨论的原因,所以关于,完全没有标准收藏,我真的很想了解这些东西,但是,我想变得像个*,所以很好,所以,嗯,接下来好吗,让我们,谈论这些被称为叛徒的事情我所有其他学生都是,笑。
因为这大概是10个星期,从字面上看,我们在第4、5周,现在好吧,让我们再谈叛徒以及这些又是什么,值得通过激发导致他们,发明好吧,那么叛徒是受这些想法激发的,例如你如何,迭代或如何遍历关联容器。
关联容器是地图或集合或诸如此类的无序集合,这不像不是向量,它没有关于如何执行命令的内在想法,您遍历这些容器,因此在遍历这些容器时会带有一个向量,你有指数int我等于0我小于V点大小我加加上但。
像地图或集合之类的东西,存在什么样的概念,好吧,你不能设定我等于任何东西,像第零个元素一样,因为它实际上并没有以任何可以检查的方式排序,我的不足之处在于,因为没有真正的终点元素,因为它不是,顺序容器。
所以我们要怎么处理这个问题,所以c ++有了这个,真正整洁的解决方案,就像让我们采用索引和某种抽象,将它们设置为更通用的设置,无论在什么容器上都可以使用,底层容器是什么,所以我们要尝试表现,像索引一样。
但是在像索引不能,通常可以正常工作,所以这个想法是一个迭代器或多个迭代器,在任何集合中存储位置的索引的概括,在,您可以将它们向前移动,可以比较您是否在终点,您可以开始创建一个。
并且它们允许您遍历任何集合,这样的迭代器心理模型的想法就像您有一些,并喜欢将其视为云,因为并非每个集合都是,顺序,因此更一般的思考集合的方法是,一切都很好,迭代器的想法是让您查看。
以某种线性方式进行非线性收集,所以是这个问题,可能会问的是,这种神奇的伟大事物如何发挥作用,我对您的回答是,现在不在乎,因为我们要相信它们会起作用,因为我们,让迭代器的抽象做这件事,我们只是要。
学习如何使用它们,以及是否要学习实现它们,祝您成功,所以我们现在就使用它们,但是想法是,如果您牢记,这非常直观,我们试图表现得像索引,但,可以更一般地工作,所以假设您有一个集合,并且迭代器是。
让您以线性方式查看此集合,因此如果您有索引,如果您有迭代器,您会说让我让我从第0个索引开始,让我从开始的迭代器开始,以便您调用collections变量,名称点开始,它会给你一个迭代器指向,序列。
您想将其存储在某种变量中,以便将其存储,在名为ITER etre的变量中,它具有某种类型,而该类型实际上是,在您使用的类中定义,因此如果我的集合是一个int集合,然后在set int类中有一个迭代器。
需要迭代器时将引用的类型,因此,回顾一下,您将第0个索引迭代器作为开始的迭代器,并将其串入变量中,并定义此迭代器的类型,在类中,所以看起来像是您有一个指向的迭代器,如果您想获得实际的东西。
那么从现在开始您的第零件事,此迭代器的结尾,因此如果您要,得到这个迭代器所指的是你用星号取消引用它,运算符,所以如果我想打印击球手的当前值,我会看到,在Eldo上出明星,是的,现在可以打印一张,我要。
我是否想移到收藏夹中的下一件商品上,以便我前进,通过调用加号加迭代器,所以我说加传递它,否则它将移动到,下一个,然后我可以再次取消引用来打印它,现在打印,两个我可以将其打印前进将其打印。
然后以某种方式我需要,能够检查我是否到达右端,因此对于建模索引,我们有0和,我们的尺寸小于v-dub,或者我们要确保在以下情况下停止播放,我们的收藏已经结束了一个,因此,经过迭代。
您可以做完全相同的事情,有一个叫做,您可以比较自己的最终迭代器,最终迭代器是一个,超过收藏的末尾,因此您可以说我的食者是否终止,质量是最后的迭代器,还可以,所以它实际上没有任何作用,与索引不同。
但它将在更一般的环境下工作,这就是,它的功能强大,所以您可以创建活动摘要,如果他们想知道的话,请参考他们,并进行比较,这看起来很像一个指针,当我们尝试迭代器时, ,它们看起来像指针。
现在您知道值得问为什么地球上有人,如果不需要的话,希望它看起来像一个指针,这个想法就像程序员非常熟悉指针的想法,所以,他们使迭代器的语法看起来和行为像,指针将是因为所有指针都是整数,而其他文献都是。
指针,是的,这个想法好极了,如果您有,向量(三分之二)中,您向其中添加了一些东西,如何将其扔到for循环中,所以通常如果你有一个向量,你将有四个整数,我等于零,我小于,大小加号的提要加号。
现在您将向量放入了迭代器,类型,向量类中的迭代器从V点开始或迭代为零开始,继续前进,直到我们点击结束迭代器,然后每次都增加就可以了,关于这个的问题,太酷了,还有更多关于。
装饰器最标准的实际上每个标准集合都有迭代器,您可以使用甚至可以索引的向量,建议您使用,迭代排序,所以当您对vector进行运算并调用insert数组时, ,不要告诉它要插入的索引,或者告诉您索引在哪里。
引发什么迭代器,这就是我们让V点开始加上两个,当我们删除第二个元素而不是DDOT擦除时-好的,因此,鉴于我们了解的情况,您可以考虑一下一个简单的问题,模板,这是隐式接口,如果,无论您传递哪种类型。
它都可以在模板函数中调用这些方法? ,通过具有迭代器的标准接口以及诸如此类的东西,可以获得很多收益,可能那里有东西,所以我不会,这只是给你的东西,考虑使用标准接口闭塞器有什么好处,嗯,好吧。
所以这直接导致了下一个想法,在C ++中, ,这些东西叫做算法,基本上就像程序员梦dream以求的,就像一些真正聪明的人坐下来实施所有,这些算法,它们将可用于任何具有迭代器的类,因此。
接下来是算法的动机,我想要排序函数,好吧,我可以编写一个排序函数,该函数将采用一个int向量并将其排序或,我可以编写一个排序函数,该函数需要一个迭代器开始和一个迭代器,并对该范围内的所有东西进行排序。
现在这个困难的方法将可以处理向量,列出它将对我有用的任何可以提供迭代器的集合,还是不太好,所以使用在迭代器上运行的标准算法,他们可以,这使他们可以工作很多次,并且严重依赖模板,因此,这是所有算法的列表。
所以有一些非常有用的算法,所以,从一个迭代器范围复制到另一个迭代器的标准副本,标准相等者检查范围是否等于,您拥有max元素的东西,该元素在迭代器中返回max元素。
我不知道的范围让我们看看我喜欢这个有趣的其他事物,我在编程采访中和那个人在一起的算法故事,就像是的,所以他在那里询问有关某种,修改过的二进制搜索,您不想找到元素,您想找到小于或等于我想要的最大元素。
就像给定元素的最大最小最小上限一样,经过研究修改,您可以做,而我和我合而为一,因为,有一种称为标准上限的算法可以做到这一点, ,像我这样的程序员和面试官都不知道那是怎么回事,这是有机的,是登录的。
是做身体搜索的,就像,是的,很酷,当您喜欢精通算法编程时,让我们真正走吧,首先在锡瓦斯(Sivas)是我不可思议的,所以如果您喜欢看国际电影, ,编程竞赛或几乎总是高层团队首先使用C +的竞赛。
因为他们要做好什么,所以写了一个集合提供迭代器,火花,然后他们可以完美地使用这些算法而无需,要做任何事情,这真的是一个强大的概念,好吧,所以我们,可能没有时间去实际研究其中一些算法,但是我。
绝对鼓励您到目前为止浏览所有问题,如果您有一个一般性的问题,就不必特定,围绕这些主题, ,好的,很酷,所以大概是第六周, Excel,现在我想只是为了结束一点,我们可以谈谈其他一些问题。
整洁的功能真的很棒,所以我首先要谈的是,再次声明免责声明不要在您的期末考试中使用它,效果不是很好,所以只在一个之外进行划分,在Sivas fest中如此整洁的功能是名为Auto的东西,嗯。
这是一个非常酷的超级酱功能,可让您键入演绎,变量的类型,所以如果变量的类型很明显,这个主意是um ,所以我将x等于3就是说x等于3很明显,三是整数,所以我可能会告诉编译器弄清楚类型。
X的int值是int,所以我能写类似Auto x等于3的东西,编译器会发现X的类型是int,所以我将显示,一些使用它的示例,但是您不应该滥用它,而应该使用,在现实生活中尽可能地做到这一点。
而不是在期末考试中,这个想法就像,只要某物的类型非常明显,就应该使用“自动” , C ++中也有一些高级的地方,但您不知道类型,在编译时,所以您在那儿用完了,所以有点,例如,您可以使Auto x等于3。
编译器会说“ X” ,就像一个int我可以弄清楚在编译时您可以说Auto VSAT ,等于图以获取顶点集,然后我会得出V集是一组顶点,通过查看获取顶点集功能的签名和。
我认为最有用的地方也就像在迭代器中一样, ,迭代器就像可怕的事情一样,是的,就像set int Colon Colon迭代器一样,这是正确的类型,因此能够执行自动ID也非常好,因此,这是最常见的用例。
通常是某人的叛徒,照片我认为还可以,所以一旦我决定与此无关, CS 106是您如何遍历一套,例如,这只是一个问题,应该,是的,所以您已经有了一些东西。
我想假设您有一套,好吧,好吧,到目前为止,当你有一个,设定您的浏览方式,就是您在X中所说的那四个,我们称之为,这是int的意思,还是我们自己称呼它,所以为索引我的集合,我们说C out X 。
正确的,这样做会在对不起的地方打印,这样就可以了。
这是我们正在打印的东西吗。
好吧,无论出于什么原因都在这里打印,但是知道吧,嗯,它会旋转集合中的所有内容,因此实际上这是简写,某种迭代器代码,所以实际上在我们做任何事情之前,您会如何用迭代器很好地编写此代码,对于自动IT来说。
它等于我,今天的行业,所以对于我来说等于零,但在设定的实验室中IT不等于BI ,先进的I 2和C输出,或者说x等于IT指向的东西,到X让我看看,所以如果我同时运行这两个代码,这些代码将打印,第二选择。
实际上每个循环都确实是语法糖,为此,这只是它的简写,所以实际上,斯坦福大学说,斯坦福实验室提供迭代器,这使您可以执行,如果您为集合提供迭代器,就可以使用类似的方法,该符号。
它将进行编译并移至每个循环的简写形式。
对于这一件事,我们谈论的还不错,所以我们可能会谈及另一件事,不会过多谈论的是,我们有一个叫做lambdas的东西, ,内联函数,对我们来说,一旦您习惯了它们,它真的很整洁,这些以多种语言存在。
但基本上是您可以,即时运行函数,而不是将它们声明为函数,使它们具有可变性,因此看起来像这样,忘记了捕获的内容,列表是针对此类的,但是您具有函数的参数,箭头和,然后是返回类型,然后如果您像这样编写函数。
通常,例如,您在打印功能中忘记了,捕获列表需要一个整数参数,返回类型为void,因此,您可以将返回类型留在凉鞋外面,然后终止,该函数,因此您已经将该函数存储了一个变量,然后您可以,像普通函数一样调用它。
您可以像在另一个函数中那样进行操作,功能,所以非常酷另一个例子是,如果您想使用,排序算法,因此标准排序算法需要迭代器时代,所以你说的是范围V点从头到尾排序,然后使用,您可以将比较函数传递给它的比较函数。
是根据我大于J的事实对它们进行排序,第一个是,肯定以相反的顺序基本上是的,所以这些实际上存在,几乎每种现代语言都支持,因此Python绝对支持JavaScript , Java事件,但还有一点。
然后是C ++,如果剩下的话真的很酷,好,我们大约有两分钟,所以我只想,总结一下这个非常酷的东西,这是我一直在寻找的好东西,真实的C ++代码示例,编写得很好,而且我讨厌,这么说。
比特币的第一次切工写得非常好,所以我们要,是的,我的身高不高,但是代码写得很好,所以我。
以为我们只是很快地看了一下,所以看到了一些我们已经,今天谈到,所以这是它在github上的比特币源代码,然后转到SRC文件夹,您会注意到很多C ++,因此点号为, CPU启动。
因此任何人都想单击以查看Rho链接,嗯,让我们用CBD的18个硬币来点,听起来好像是一堂课,所以说比特币点H就是一堂课,里面有一些其他的类,它正在初始化一些东西,并且有一些,方法具有一些模板化函数。
可在其看起来的任何流上运行,就像这里的东西和其他班级一样,如果我们看起来,有一个无序的实验室,它是一个哈希图,就像我们看到的那样, CPP文件,与您实现硬币类外观的方法相同,它为点返回一个迭代器,是的。
如果是迭代器,则是正确的,不等于现金硬币事件,所以真的像我不是什么,不是这样,实际上是编写了超大型代码,您不使用索引,而是使用迭代,他不在位,所有这些想法又是另一个整数,依此类推,所以我。
鼓励您自己看一看,但我认为,谢谢你。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P27:【Lecture 27】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
所以看,我知道您在想什么是周一的期末考试。 ,我们都知道我希望,这是我需要你去的地方,来到这里,你们中的一些人会去Dinkelspiel礼堂的,在那边,我想,如果您的姓氏以一个姓氏开头。
通过GI希望您来到这里,如果它以Hmm Z开头,则转到, Dinkelspiel好吧,它将在星期一上午8:30 ,正确和早期,我强烈建议您设置几个警报,如果你睡过头,你基本上只是在吃自己的考试时间。
我不会,如果您迟到了,请给您额外的时间,所以请务必设置,即将到来的星期一没有警报,这将是真正的早期,非常抱歉,就像他们每个季度都给我们的时间,在大学办公室里不喜欢这个新的部门。
他们不喜欢安排考试或其他事情,所以他们总是在星期一给我们,早上8:30,总会有一个男人出现一个半小时,抱歉,我睡过头了,不要被那个家伙检查过,就像四个警报一样。
邻居警报设置您的室友警报告诉您妈妈八点钟给您打电话,就像准时起床一样,现在就去考试吧,所以我想要,今天要做的是我想谈谈考试,我的意思是你们有,可能已经在看一些练习材料,但是。
提出一些问题或回答有关考试的一些问题,周一要来,我想总结一下这个季度,聊一点,关于我们学到的一些东西的摘要,例如,那是计划,所以让我跳到考试的一部分,网页,所以我们在这里发布了三门练习考试,我要在。
这个周末可能至少要在今周末再进行一次实践考试,因为,希望从中研究更多问题在代码中还有更多问题,一步一步的站点,如果您仍然需要更多练习,好吧,如果您查看,所有这些实践考试,我都会问你一些实际的问题。
测试将是这些类型的问题,我不会丢球,问你一个完全不同的问题,你从未见过,在此之前,如果您看这些练习考试,我认为那会让您,为您要面对的事情做好了准备,这里有一个主题列表,您可以,您需要学习考试吗?
您知道人们已经问过考试是累积考试还是,如果它是自期中以来的材料,我的意思是肯定是在,自期中以来的材料,但您在期中之前学到的很多东西是,仍然需要,因为您仍然需要了解递归,您仍然需要。
了解您仍然需要了解指针和ATP的指针,我们了解到的,但是您正在使用它们来解决这些新问题,我们在期中考试之后看到的,所以这些是我要测试的主要主题,在链表上的二叉树回溯实现集合。
图哈希和火鸡以及排序和继承很多东西,底部是过去一个半星期我们讨论的内容,像是作业七之后在本季度末在这里出来的,所以,这基本上是主题集,我们可以保证某些事情,不会在这里经受考验我一直想奖励那些来的人。
上课,所以我会在今天的演讲中的某个时候回答,几个问题,以及他们是否会接受测试,我将转向,这段时间关闭了视频,所以不在这里的人会,不知道,否则我猜他们不会知道,除非您告诉他们,否则不要告诉他们。
这是一组主题,我的意思是说,如果您通过这些考试, ,了解我可能会问你的那种锻炼方式,我的意思是如果你,只看第一个,我该怎么办, 6b考试,我知道我最近一直在教书,我有点忘了自己,就像你要去哪里,哦。
你站在房间的前面哦,好的,好的,所以嗯,练习最后一个,就像你知道这是一个不错的例子,搜索和排序问题在这里,我问你有关二进制搜索的问题,选择排序插入排序合并排序这是三种排序算法。
我可能会问你关于我不会问你关于quicksort或Pogo ,排序或其他任何一个链接列表神秘问题,给你一个链接的数据列表,我给你一段代码,我说什么,它是否对列表起作用,所以我希望您遍历代码并查看。
它确实存在一个链接列表代码编写问题,在此您得到了正面的评价,链表以及您应该执行的某种操作,执行清单上的操作,这样很可能会在,真正的最终正确的二进制二叉树我有二叉树阅读问题, 。
二叉树写作问题我们当然要小心区分,在常规二叉树和二叉搜索树之间,对二叉搜索树,从左到右排序的那些,所以如果我告诉你我,要将这些节点添加到二叉搜索树中,我希望您向我展示。
您将在这种情况下将较小的值放在左侧,我在左侧字母的前面,然后在右侧字母的后面,曾经有过在考试期间非常紧张的学生,他们不能,记住一些字母的顺序,你会笑,但是星期一可能会发生在你们当中,所以,因为我爱你们。
我会把字母放在这里,我会为你写出来,不要说我不在那儿,是的,您需要我,所以不区分大小写的字母顺序排序,所以我会问,您将内容添加到二叉搜索树中,我可能会要求您遍历,我有时可能会要求您从树中删除一些元素。
问你树是否平衡,左右边是否平衡,大小大致相等,所以我想问一下有关的问题,进行不同的练习考试,以了解我所要做的事情,可能会问有人举手在任何时候打断你,您无需了解有关如何编写AVL代码的问题。
重新平衡旋转树或任何此类东西的树,不,我,希望您了解什么平衡我希望您能够看一棵树,告诉我它是否平衡,为什么,但是那是我不希望你,必须修复它,以使其平衡到目前为止有关链接的任何其他问题。
列出有关二叉树的内容到目前为止我还没有说过的其他内容,是的,我,并不意味着完整,我的意思是平衡,我们就像左边的高度,相对于右侧的高度(如果两者彼此在同一范围内) ,平衡,并且同一属性必须一直保持正确。
背部,是的,二叉树和二叉搜索树之间的区别基本上是二叉树,树只是二叉树,该树中的值可以是任何顺序,也可以是,排列左侧的值不必小于的值,右边的值不必小于的值,底部,我可以随意整理数据。
然后将任何东西放在我想要的任何地方,一棵树怎么办,它们必须从左到右排序,所以很多,当我要求您读取二叉树的代码时,我会执行二叉搜索,像这样的树,我这样做的原因是因为有一个明确的答案。
如果我告诉您将这些值添加到常规二叉树中,则可以添加它们,任何地方,所以只有二叉搜索树时,它只有一个明确的答案,我要你写代码,很可能是一个普通的二叉树,不是像本例中的二叉搜索树,这里没有特别。
按树中的数字排序左侧的数字不是最小的,不一定,右边的不是最大的,它们只是一堆,我希望您在树中搜索一些交换或删除的数字,叶子或类似的东西,你知道,是的,所以我可能会问你一个。
您在哪里编写处理二进制树的代码的问题,事件字符串的二进制树,类似于某种简单的数据, ,我会给你一棵树的根,然后告诉你做点好事,通常这些都是递归函数,因为我们递归处理树,如果您遇到这些问题。
请确保正在调用自己的函数,在您的代码中的某个点递归,我可能会问你有关程序堆的二叉树的写法,所以你应该,知道堆具有从上到下的垂直排序,否则父级是,小于子项,或者如果您将其视为数组,则,索引小于后来的索引。
所以我想让你看看,您可以在添加和删除元素时使气泡起伏,基本上,我只会问你有关添加和删除堆的问题,在测试中堆积我不会要求您为,我只想问你阅读堆图的代码,我可能会问你,看一下图并回答一些有关图的问题。
问题有时我给你看一张图表的图片,我问你一些问题,这些是直接循环的吗?是加权的吗?是连接的吗? ,东西只是图的一般属性有时我要你告诉我,像F部分那样的图形表示,表示写一个邻接表,如果您不记得那些图。
则在图上写图的邻接矩阵,看一下我们有时谈论图形实现的讲座,我会请您追踪一下如果在图表上进行搜索会发生什么情况,使用Dijkstra或BFS或HR或类似的东西,哦,在其中一个实践问题上。
它使用了一种称为“弱”的术语,连接或牢固连接我不会在决赛上询问您,想知道这些术语的含义基本上是弱连接意味着,您有一个有向图,其箭头在边缘,并且如果,它是无向的,因此,边沿都是双向的,则图形将变为。
如果是这种情况,那么您有一个弱连接图,紧密连接的图表示它已经按照其连接方式连接了,但是,我不会问你,我只会问它是否已连接,所以基本上,如果是这些连接中的any一种,您基本上可以在后面说是,是的。
这是一个很好的问题,是的,通常对于一颗星星,您知道自己是否记得,开拓者中的一位您知道启发式功能很重要,是算法的一部分,所以如果我要问你通过恒星追踪,必须告诉您启发式功能是什么,以便您知道是否要。
必须追踪一颗星星,我必须说些启发式的话,就是这个时候,或者这个加号,我必须给你一些,如果您说我不太明白现在的启发式价值将是什么,记住一颗星星是如何工作的一颗星星的整个算法将提供给您。
作为参考表上的伪代码,您可以立即在考试中查看,页面上,您可以看到参考表上的内容确实包含所有,如果有用的话,可以从开拓者那里获取图形算法伪代码,对你,是的,我的意思是。
事情然后是a可以到达B但B不能到达右边,所以如果我想问你关于连通性的问题,我会尽力弄清楚我的意思。 ,您考虑边缘的方向,我会这样说,如果是这样,那么,那样的弱连接图不会被连接,但是如果我不这样做。
小心我会说你知道这是假设图是无向的,你会说,它是否已连接,然后您可以回答然后将一个连接,在那种情况下是的,是的,那是图读,图形编写将是一种功能,我可以通过它传递基本图形,作为参数。
您可以对其进行搜索或修改,以某种方式绘制图形或计算某些东西我有时不知道,最终并非总是递归的,但有时我的意思是如果您正在这样做,对给定的顶点进行操作,然后您要执行相同的操作。
所有的邻居或您经常想拥有的其他某个顶点,包含图和顶点的递归函数,也许其中一些问题对他们来说有些回溯,您在哪里进行搜索,选择,探索和选择,直到找到解决方案,所以我的意思是这些问题有时有点。
我可以同时询问递归回溯的特洛伊木马,您知道您可能不需要在这里递归,但是您可能会,解决问题的最佳方法,您可以告诉我是否要您做,回溯,因为在问题描述中我会说类似,您需要尝试所有可能的方法才能找到答案。
这并不需要有效,如果我说这样的话,这就是回溯尝试所有事情的方法,然后看看它们中的任何一个是否有效,我可能基本上是想告诉您您应该使用该技术,但我不想完全放弃游戏,所以你可以解码,我的神秘指令就可以了。
所以用图写的将使用,基本图表来自作业的七个相同的开拓者参考表,具有基本图表中的所有方法和所有内容,因此您不必,记住那些参考表通常不完整,它们通常都有,最常见的方法,但是如果您碰巧知道其他方法。
在工作表上,但您知道该方法在那里,您可以调用它,好吧,只要我列出了每个集合的每个方法,将不得不给您参考手册,而不是工作表之类的东西,纸质太多了,所以该图写了另外两个主题。
有时候我们有继承问题这些可恶的东西这些荒谬的,您必须走过的糟糕代码的迷宫,您知道你们看到过,几天前与阿什利(Ashley)在一起的人,你知道如果我问你其中之一, ,像这样的事情,我有几个班级,他们有。
声明了一些方法,其中一些方法彼此扩展,其中一些方法覆盖,其他事情,我声明一些变量,我请你做一些,函数调用,看看它们做什么,然后一些函数调用,还要对他们进行投射,所以您知道我不会再教导您。
您应该看一下她的演讲视频中的Ashley幻灯片材料,但是我,意味着如果您要执行这些操作,则必须查看变量的类型,看看代码是否可以编译,您必须查看对象的类型。
存储以查看代码在运行时的功能以及是否进行强制转换,需要查看转换类型以查看其是否具有正确的方法,因此,你知道她教了你一系列步骤,这些步骤将引导你,在这些答案上,我们肯定会收到很多有关。
测试前几天在广场上出现这些问题,如果您,浏览其中之一,您就像在广场,我们会聊聊您,通过它,我们将尝试向您解释它,这不是问题,我们很高兴为您提供帮助,一旦完成了其中的一些操作,就可以帮助您解决这类问题。
我不会在真正的测试中有任何新的技巧,所以如果可以的话,在实践测试中,您将准备好进行实际测试,并且,最后一个实际上不是最后一个,但下一个是继承写作,那就是我想要的已经存在的现有类的地方。
你写一个扩展它的子类,我会说一些你知道的事情,你掷骰子,大于区域,所以我想告诉您的是我希望您,覆盖您知道的角色方法,我正在尝试用英语告诉您,我希望您在解决方案中覆盖或实现某些方法,减少某些行为,因此。
如果从以下一种情况看不清楚, ,我想要的是您可能想窥探以下问题之一的答案,他们只是为了看看马蒂到底想让我写什么,在这里,我有几个学生问我这个问题,所以只是测试您的,使用继承类语法。
我认为这是一个特殊的练习考试,没有哈希问题,但我也可能会问你,散列我忘记了这个数字有散列,而我没有散列,给你一个哈希值我最好给你一个哈希值搜索树哈希好所以, test3有一个哈希问题的例子。
您的计算机上有一个类似的例子,部分讲义我肯定会问你这样的事情,我在哈希表中放了一些东西,绘制了raid的样子,绘制小链接列表,以及每个元素中将包含哪些元素,存放在哪里,如果我做了重新哈希处理。
他们会转移到那种地方,好的,是的,您想知道我是否要对您进行哈希测试,写作和阅读我很乐意回答这个问题好吧,是的,您还有其他关于考试的疑问,问题是如果有一个继承阅读问题,将无法编译,这将导致崩溃。
哪一个是正确的答案? ,答案是,如果不进行编译,那么它将永远无法开始运行,崩溃,直到您运行它才崩溃,所以您只能说崩溃了,编译成功,因此编译器错误优先于崩溃人员,其他其他考试题,是的。
所以如果您对此子弹有一些困惑, ,询问它说我们不会要您重载equals运算符,但是某些实践测试会使其他运算符超载,因此equals运算符,是赋值运算符,例如如果您说2x等于5,则可以覆盖。
我没有谈论过那个操作员,以及为什么要这么做,它与指针,内存泄漏和垃圾内存有关, ,有时,由于各种原因而编写类时,您需要重载,那个运营商和我所需要了解的一些方面,我都做了讨论,但是,我不是这个季度。
即使有,我也不会问你一个问题,所以我,我可能会要求您重载运算符,但这会更像是,小于小于小于等于打印一个对象,或者等于等于比较一个对象,它会更像是您看到之前所见过的那种东西。
你们觉得还有其他准备做的事情了,是的,有一个问题是的,可以继续写点H和点CPP文件,我想问你这些继承写作问题之一,您编写将在这两个文件中保存的内容,但是,基本上把它们全部写在一张纸上。
所以我的意思是你通常,是的,但是只有在这种问题上,这是我唯一要问的问题,你写一个完整的类好吧,是的,你必须像include那样写,现在,您只要拥有合适的权限,就不必再写这些东西,所有的代码和声明。
如果然后def并包括结束,如果和,所有您可以省去的部分,都会有一个文件I / O ,问题嗯,也许不是我的意思是我想我应该说应该有更多,具体我不认为,所以不,我希望你,处理数据。
但我会将数据作为矢量或ADT或其他形式传递给您,这样,所以我希望我不会让你使用if' ,在测试中流是的是的,所有图,哦,对,对,对,对,嗯,让我快速单击此按钮, ,总结了我的宗教和政治信仰,好吧。
我不知道,录象带的那部分哦,很好哦,是的,继续,你的意思是我们吃的图或图对我认为的问题,他们一步一步地在代码中,不是吗? ,想要添加它们,我认为它们是对写作图形的仔细检查,认为他们不是图形阅读者。
但那只是一支铅笔,和纸,我的意思是我的建议是去那里尝试,或者如果您在那里没有它们,您可以进行一个空项目,然后,提示创建器并制作图形,您知道尝试在其上调用函数,想说几件事,如果有的话。
您还剩下大约一半的课程,有关您知道如何在TAS和本节中找到我的考试的其他问题,广场上的领导者,我尽量避免过分地咬你的头,所以我想在这里谈谈最后几件事,有点像接下来的事情。
你知道下一步你会做什么或拥有什么。
我们学到了类似的东西,所以这里的前几张幻灯片我想我会,只是在经历比赛,就像嘿,我们该怎么做,我不知道我们了解了C ++ ,我想除非你做了106公升,否则我们并不会真正完全学习这门语言,但是。
您学习了很多C ++,所以我想如果一些公司问您,您知道的编程语言我想您可以说我已经学习过C ++我编码了c ++ ,在106节拍的CS2课程中,我们学到了很多有关数据和收集的知识,这是很重要的知识。
您知道很多课程,而继续上课,而且您再也不会使用这些东西了,但是如果您要编写代码,那么您将成为,大量使用所有这些数据,每个程序都充满了数据,因此您,永远不会停止使用列表或向量,而你永远不会停止使用。
散列图,您经常会拥有遍历的递归结构,通过您将要做很多这样的事情,我们将学习数据,在我们了解树和节点以及所有这些的内部实现了结构,我会说,对于很多人来说,当你真正地出去时,在代码的世界中。
您不会像我们一样从头实现那么多的结构,试图做,但有时你做,如果你不知道自己到底是怎么,卡住了,所以你想知道事情如何运作,我认为其中很大一部分是,您必须了解一些有关事物构建的方式,以便。
您会知道您知道运行时的权衡,为什么在我打印输出时会如此? ,散列的哈希表,它按您想要的混乱顺序打印出来,了解这些东西,这样您就真正知道自己在做什么,使用所有这些库,所以我们学到了很多东西。
不同的算法图搜索排序排列遍历,有趣的是,这些算法非常基础,还会带来许多其他问题,直到嘿,我需要所有排列,我为之编写的代码在哪里,你知道排列,嘿,我需要做一个遍历遍历,我想我已经,在二叉树上做到这一点。
我们学会了递归递归非常重要,某些编码您不需要做很多递归我有一些人告诉我,他们一生中并没有真正使用递归,但这只是其中之一,那些事情,当它是完成工作的正确工具时, ,正确的工具,在需要时就需要。
而且我有时在编写网络应用程序时发现自己正在使用它,因为网页,实现为文档对象模型,它是一棵树,因此您通常必须,就像递归地在那棵树上寻找东西,所以我发现自己在。
您知道的Web我正在编写JavaScript Web代码我在最后一次进行递归,我认为我会需要的地方,以便您了解递归和回溯,我会说一些有关oo P面向对象编程的知识,这是非常不完整的事情。
您知道我们并没有真正深入,以后还有其他课程,您会做更多我想这不只是,关于学习什么是类的语法什么是继承它也很像,学习如何解决大问题,如何将其分解为课堂,和层次结构来解决问题,我们根本没有真正了解到这一点。
而我,认为以后还会有其他课程,例如CS 108,您可以在那里学习如何做,这可能是您真正需要的技能,所以我想要。
简短地谈论一些您可以做的事情,如果,您想这样做,其中一些人可能已经注册了,因为,我是里诺(Reno),因为注册开放后,接下来的几节课大多数学生,可能参加CS的可能是CS 103或CS 107。
并且您知道您是否喜欢此课程,如果有的话,您可以向我和员工支付最高的赞美,你参加了另一场CS课,这会让我开心,我会觉得我成功了,或者至少我没有打败你,我知道你,可能要等到决赛之后才能决定,但接下来的决定。
大多数人参加107是我们的下一门编程课程103是我们的第一门课程,理论计算机科学课程和CS的这两个领域都非常,重要的是,我们会对每个您要。
因此,我想简要地谈谈这些课程,我看到您实际上在,我想知道你是否可以跟我走到这里,因为你,知道我要向您介绍这些课程,但实际上,接受了他们,她可以说莱昂比我更有权威,可以以某种方式提供。
所以也许我会给您快速评估一下我的想法,这些课是,然后我要你纠正我,告诉我我怎么样,完全错误的是,很酷,嘿,看看S107是我们的计算机组织系统,上课,您会更深入地了解硬件,从而进一步了解如何。
处理器如何工作,内存如何工作,如何知道编写的代码如何获得,编译并组装成一个工作程序,您可以了解有关操作的信息,更深层次的系统,您会学到一些叫做汇编代码的东西。
就像给处理器的指令说明您的C代码或C ++代码,或将Java代码编译进去,这样您就可以将其深入,像梦中的开始梦之类的东西,那就是107在纸上的意思,我知道有些人认为107是。
吓人的课程,如果你们有朋友或认识的人,我有您,哦,亲爱的上帝,我在107年帮我写了它,它以,我听到的具有挑战性的课是,最大的区别之一不是,它的强度是C s106 B的十倍,只是没有层而且。
您可能知道该图层是有帮助的,他们仍然有助手,他们有TAS ,他们有办公时间,但根本没有部门领导的暴民,一整夜的时间都在等待回答问题,所以你必须有点,更独立地找到问题和答案的答案,这样可以。
对一些学生来说充满挑战,但是我的感觉是,如果你在, 106 B或X,并且您努力工作,现在在107中也可以表现出色,从未在这里上过课,所以我上过与其他地方相同的课程。
我想问一下您实际上告诉我有关CS 107的情况,差不多是七个,七个吓人他们应该参加CS 107吗?首先对我来说是107 ,我真的开始理解指针,就像我通过106英尺的距离,就像我不太了解这些。
我在整个过程中都捏造了自己的样子,指针痕迹我们被允许放在便条纸中,我知道最便宜的最佳指针,跟踪,因为我找不到指针,所以107您将学习,如果进行多态性讲座,指针真的非常好,您就像在等待。
为什么C plus总线只能让您将某物传递给某物,否则,即使它崩溃,即使不是,就像107都是关于,传递变量以为他们不是真的为了喜欢弄清楚,内存布置在下面,非常酷,因此您可以学到很多东西。
关于内存的工作原理,您将学到很多有关如何调试所需的知识107 ,知道如何反馈,这真的很酷,因为它使所有,未来您的编程漏洞会变得越来越难,杀手不是,所以我知道自从我以来家庭作业已经发生了很大变化,拿走了。
所以我觉得我所说的话都不正确,因为至少,我认为其中三个作业已更改或更改了顺序,但您可以,了解他们仍然如何进行C矢量和C映射我想,所以我想,因此,如果您喜欢我在谈论地图而Marty在谈论。
房屋警察就像你一样,我真的很想实现,在107中实现一个哈希映射,这确实很棒,但是,很难,但主要是因为调试困难,所以如果您喜欢,不知道如何调试,从概念上讲,这使我很难,认为这是非常困难的。
只是C不是一种具有友好错误的语言,消息,例如,如果您记得从2006年开始,那就像Java在给您,像数组索引越界异常,例如库仑指南和C ,就像基本上他们什么都不给你,只是崩溃而已,没有。
有关其崩溃原因的信息,这就是107的组成部分,但实际上,从概念上讲,这不是一个超级难的课程,而是一个有趣的课程,但是,不像106辆汽车中的许多概念比这些概念更难,当我说我的意思是调试只是很抱歉。
我们俩都应该进入市场,应该看一下,并确定您是否有想要做的事情的目标,您想在CS部门这里学习我们的课程的事情107 ,是所有事物的先决条件,因此您至少应该知道, 107确实可以解锁一大堆您可能会赞叹的类。
我想在107之后服用107 ,有趣的是,我认为正如您所说的,这确实释放了,就像我执行此操作时实际发生的情况或此代码下发生的情况,我写给你的感觉让你更深刻地了解到底发生了什么,所有这一切都没有那么神奇。
而作为基础,那么您就准备好了,一整堆的东西,如果我可以弹出的话,我就不会看到它,但是如果我能在107后弹出课程图,那有一百万,指向所有其他东西的箭头是的问题,好吧107在实习之前,你可以跟那个人说话。
好吧,所以,我第一次实习之前没有拿107,所以我第一次实习是,基本上像107中需要的一堆不同工具一样学习,在我介绍它之前,他们在107年教过你,所以基本上,意味着我在实习的第一周就试图像。
107的前几周,还有我的实习期,所以我强烈建议,当我说要容易得多时,学习大东西虽然这是优势,但我,如果您有实习机会,强烈建议您在实习之前尝试1:07 ,在您的日程安排中留出足够的空间。
因为它最终会引起您的兴趣,这样比较容易,因为您会更好地掌握技巧,而且您只会知道,您可能会在不特别的太监中使用的工具,最大的一个喜欢学习如何使用终端mm-hmm是的,Ashley提到。
另一件事是在过去一两年中,他们一直在寻找,上课,并尝试使某些作业更易于访问,意识到有些学生认为这确实具有挑战性,我认为他们已经,试图增加更多支持,更多帮助,使规格说明更加清晰,重新设计了一些家庭作业。
使它们更加实用,可以理解或具有更多里程碑,因此我认为,这个东西是你知道有点过时了,所以关于, 1:07我希望你们中的一些人会考虑把它也有变化。
107被称为107 e e是嵌入式的,您知道您将学习如何,为一台名为Raspberry Pi的小型微型计算机编程,所以您,实际编写在该计算机上运行的代码,这很有趣。
因为您知道代码是在整个计算机上运行的唯一内容,就像您打开它,它立即运行您的程序,就像没有,操作系统,没有终端,没有GUI,它可以立即运行,您的代码,这很有趣,因为当您使,就像三盏灯打开并闪烁一样。
就像是是的,灯闪烁了,确实做到了,这使您了解了这些简单的事情,就像您知道我一样,怀疑我会像我第一次那样和婴儿一起经历这种情况,就像捡起一块食物放在她的脸上,我会像是,当您在107 E处闪烁时会是您。
它会小一点,当然是因为他们必须在每个人都坐在那里的地方做这些实验室,他们的小型设备,因此它们的扩展速度不如107 ,所以你必须申请参加,如果你是,有兴趣的你可以申请参加,他们都是学生都要求的好班级。
我应该带哪一个知道常规107的寿命更长,可能多了一些打油的机器,多了一点点抛光107 ,有时,代码中包含您知道的入门代码有错误,或者规范中包含,错字或其他东西在边缘或其他地方有点粗糙,因为它比较新。
但是嘿,这是很多学生都在学习的新领域,对这些设备感兴趣的只是学习很多,同样的,你学到的东西基本上很相似,所以它们都是等效的,就您所学到的东西可以做什么而言,您知道有,当您使用嵌入式设备时。
会发生一些有趣的事情,代码不起作用,这是因为实际上是将Raspberry Pi塞入其中,你的背包,你弯曲了别针之一或类似你的东西,实际上损坏了硬件,您知道我的意思是您可以拥有它或。
可能有一个有故障的芯片,例如,所以您的代码无法运行,并且,因为芯片或其他原因,这很有趣,但是无论如何, ,这里有两个选择,所以您知道您是否认为我的描述或阿什利的。
对107的描述听起来不像是您知道令人兴奋的170可能会使您发痒,看中了,但是正如我说的,我真的认为这里的吸引力在于,如果您掌握了这一知识基础,那么可以做很多事情,最令人着迷的是我要再上的一堂课。
您的意见是CS 103,这是我们专业的理论介绍,这是计算的数学基础这门课程有一点点,编写一些编程代码,但是它更像是一门数学课程,用铅笔和纸样证明算法,这类事情及其原因,我们研究的原因是。
这确实是计算机科学的核心,计算机科学不是真的与您有关吗? ,它更像是计算机可以计算的限制以及,计算,所以您会学到一些真正令人着迷的知识,他们知道逻辑,然后您会学习一个理论轨道,从而了解您所了解的概率。
计算模型以及它们可以做什么和不能做什么,您将学习如何,作证明,以便如果我可以做到,那么我可以做到,如果我不能做到,我,无法做到,您将了解计算机程序可以提供的种类的限制,有各种各样非常有趣的事情吗? 。
引人入胜的问题,在我们的领域和有关的很酷的事情之一,计算机科学是一个非常年轻的领域,所以我们还没有想到,一切都解决了,但是在这个领域有很多大问题,我们不知道答案,如果您弄清楚了,您将会很富有, ,著名。
每个人都会因您的工作而受到您的影响,不要大笑,可能会发生,可能是您来自这样的地方,如果, HAP,所以我现在要说的就是103 ,你用不正确的手像这样的课程可能很枯燥,和类似的证据和东西,但好消息是。
我们已经有了一些,最好的人教这节课基思·施瓦兹(Keith Schwartz)很棒,这个课程很多,我不知道他的血液中有什么,我想要一个,从这个家伙那里输血,他精力充沛,是一位出色的老师,他很出色。
辛西娅·李(Cynthia Lee)是我们另一位出色的讲师,部门一直在和他一起工作,她也在教书,他们俩,伟大的辛西娅是这所大学中最优秀的人之一,你知道,她会照顾你,当你需要帮助时她会帮助你,所以这节课。
我认为我们部门的优势之一就是我们投入了一些,这是班上最好的,因为学生需要它,所以我实际上对您有任何帮助,想增加约103,所以我专注于理论学习,因为我参加了103 ,大一新生,我非常喜欢它。
所以在上编程之前我就喜欢它,在这里上课就像我进来,并在UCS专业内修了103就是我,很喜欢这堂课,所以我进来有点想你是否足够好,程序员,您可以让计算机在本节课中做任何您想做的事情,数学上证明那是不对的。
这真的很酷,您会收到类似的问题,这大概需要花费一个问题,您可能以前曾遇到过几个不同的问题,您编写了一个计算机程序来解决Sudoku网格问题,就像,很难仅仅按照Doku来编写答案。
因为它只是为了验证给定的,数独板有效还是类似,很难找到炸弹和,扫雷,因为要验证这些位置是否有效,所以这是一个非常酷的盒子,因为您会遇到很多不同的地方,问题,使您可以采取其他非常酷的数据结构课程,和算法。
因此,如果您认为图表非常酷,或者其中的一些,我们谈论的树内容很酷或其他一些数据,我们在课堂上讨论的结构,以及这些数据结构的方式,在幕后和他们的Big O工作,以及我们如何获得这样的Big O 。
这堂课讨论的不多,但是让您准备了其他的课程,谈论很多,所以我是103的忠实粉丝,辛西娅和基思都很棒,人和精彩的讲座,因此我强烈建议您参加其中一项,斯坦福大学迄今为止最便宜的成本。
令人着迷的东西我也认为这堂课有趣的事情之一是,您会了解到在难度和难度上彼此相似的问题,这样您就可以学习,如果我可以对此问题进行映射,那么我所知道的关于这个问题的一切我也知道关于这个问题的那个。
帮助您证明无法合理解决此问题,时间量,因为无法在合理的时间内解决,这个基本上和那个相同,或者可以转换成,那一个,所以你可以通过谈论自然来做这些真正酷的事情,问题的性质算法和计算,所以它真的很有趣。
他们会变得有趣和有趣的东西,所以我想你可以为它定价,一分钟,我想我认为我们很好,谢谢,嗯,所以还有很多其他的,很棒的CS课程CS 9是一个很棒的课程,您可能想在这个秋天,秋天。
我们提供的这门课程全是为技术面试做准备,我敢肯定,你们中的一些人希望对此权利有所帮助,以便他们找到合适的人选,进来给你提示,他们会恢复工作坊他们有实习面试,他们有练习练习,您可以进行cs9很棒的检查。
因为它只是,在秋天提供是因为正确的招聘季节,该课程的授课时间有很多CS课程, ,少于100,这些通常是学生开设的课程,现在您可能,说听起来像是同盟,我想上真正的课,但是不,但是其中很多是,相当不错。
他们中的许多人教授一些我们没有的实用知识,我想学习如何使用Python进行编码的课程, javascript或我想学习如何使用MapReduce框架进行计算,规模或类似的东西,你知道很多这类的课程教你。
这些您可能想学习CS50的小实用技巧令人着迷,这是CS4的社交产品,还有其他50门课程,如果您正在寻找类似的东西,我该如何处理,对东西和CS东西进行编码,并将其用于实际的东西,以帮助人们,更好的世界。
那就是您想要开始的地方。 ,他们在做什么,他们有一些有趣的项目,实际上是直接,影响很多真实的人,这里的一些课程,我觉得很有趣的课程我想稍微小心一点,不要过度,推荐任何东西,因为每个人的兴趣都不一样。
所以你知道我,编码员和黑客,所以我对编码,Web应用程序和Android应用程序感兴趣, , iPhone应用程序,因此,如果您想学习这些种类的话,这里有很多课程,如果要构建更大的东西。
HCI课程147很棒,希望整个季度都在设计和构建更大的系统,而且您知道您可以大致了解其他课程号,您可能要注意的是193,这对于,每当我们有一个不适合的特殊主题时, ,另一个类别。
例如我们在该类别下的移动应用课程,如果我们知道,有时只是一些随机的教授会说我想深入学习一堂课,学习好吧,我们将其称为193 K或类似的东西,所以您每个季度都知道,每年也许看那个课程号。
看看是否有什么很酷的,在那里列出,所以这是我们的一些课程,我只剩下几分钟了,所以我有点想跳过一些事情,如果您喜欢这堂课,嘿,也许你能付给我的另一个最好的赞美会被认为。
主修CS或辅修CS是很多人关心的很好的专业,这个专业的教学会照顾你,我们基本上是第一,在CS的全国学校学习,如果您愿意的话,您将获得良好的教育,我们的专业,你可以辅修,如果你想看看辅修,你可以看看。
在同一网页上,您基本上会选择103107我提到的内容,再加上两个或,您可以在CS中修读三门以上的课程,这是对您所学内容的一个很好的补充,如果你是大二,大三或其他,那你就说我不。
知道我是否有时间改读我的专业或任何你知道的很好的未成年人,生一个未成年人,如果您拥有生物+科技或经济+科技等,不管您从事后期技术工作,我敢打赌,我们的履历会很好,如果您想在毕业学校学习。
可以得到一名教练,例如您是大四学生, ,你好像对我来说太迟了,也许不是,也许我们没有,这些其他专业我没有很多时间,但是这些其他专业,基本上是您知道的技术,它将技术与其他事物融合在一起。
加上逻辑和人工智能技术,商业技术,数学技术和电气,工程或硬件,就像我们一样,还有各种各样的东西,你知道巧克力加花生酱会更好,所以如果你喜欢这个,但是,您还有其他想做的事情,我们可能会为您准备一对专业。
快捷的东西,如果您愿意,我会通过它,要学习更多东西,在线上有很多好东西,课程,有在线教程,有在线实践,这是一个很棒的领域,只教自己一些东西,我想知道您如何编写iPhone应用程序,您会发现。
如果要获得一个,您可能已经可以实习了,可以和公司谈很多,的公司希望只有您真正具备专业知识水平的人员,因为他们想与您建立关系,以便当您,毕业后,您将为他们工作,因为吸引人如此竞争,他们对他们很辛苦。
他们希望你们如此糟糕,以至于他们想尽快与您交谈,他们可以,如果您想了解有关实习的信息,请访问斯坦福论坛,注册他们的邮件列表,并在其中发送有关以下内容的行业公告: ,职位和广告以及技术讲座之类的东西。
我在这些上有一些链接,您可以稍后查看的幻灯片这些是一堆拥有实习机会的公司,特别适合新生和没有上过很多课的人,他们不会和你竞争一些大三或小辈,为您服务,这些幻灯片中有几页,您可以查看,在此之后。
也许是在春假期间,他们正在申请夏季,如果你想看看这些大公司和小公司都是,寻找您,请查看这张幻灯片上还有更多内容,我想说的最后几件事你可以教自己很多有趣的东西。
您想去做的事情去尝试教给自己关于它的知识,学习如何,让网站或移动应用尝试学习以106 P重写的新语言,使用Python进行作业,看看是否可以做,让我在这里前进一点,以便,另一件事是。
我希望你们中的一些人将来会考虑将,成为部门负责人,我们需要更多的人,而您已经具备了我们想要的资格,如果您喜欢这门课,就会喜欢您,并且您想帮助其他人,你帮助了宿舍里的人你帮助了巢穴里的人,太棒了。
我们希望我们希望您做到这一点,并为此支付您一周的费用,好吧,我们谈论了几周前,也许您可以注册,我想花点时间说你的秋天,知道这个季度对我来说是一个独特的季度,因为您知道我的小宝贝和,很难。
你知道我必须走了很多路,很难做到这一点, ,这个,我不希望你们为此受苦,那只是,真的因为工作量巨大而屈服,其实我办公室里有东西要送给你,我想送一点礼物,以后给你,我没带,因为我要丢了,我很笨拙,但我。
也想认为部门负责人的所有帮助他们不在这里,所以您,我想必须为他们鼓掌,但对于他们给予您的巨大帮助, ,莱尔和其他部门的负责人非常出色,非常感谢。
祝你学习顺利,见星期一, [掌声] 。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P3:【Lecture 03】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
好吧,我想我们回来了,真抱歉, mm-hmm,让我们继续前进或质疑,继续吧,哦,不是吗,我不知道坚持下去对我来说真的很好,所以。
如果没有,我可以在这里补上,让我们来数一下我的时间,今天黑鞋要花多长时间,是不是当你们转到我的网站时您看不到它吗? 。
现在怎么样了,现在好吧,所以应该抱歉,出了点问题好吗是的出了什么问题了是怎么回事。
好吧,确定的问题是我打个招呼再加上他们很高,然后我得到, x等于那里,所以每当字面量读,关闭,这是我的专业,是一个老式脚本,表示它无法正常运行,韦伯斯特禁止没有任何东西,这些链接到整个国家的链接。
但是当您将其存储到变量中,屏幕类型的屏幕类型是直行的新C ++类型,我们,所有类型的屏幕,而不是人的屏幕,都会放入其中,执行隐式转换,将其转变为新的好人,经典的纸弦。
所以我们在那一刻就可以在变量中键入三个,您必须写护理之星,我不想谈论太多,因为,那通常不是您想在我们班上做的,但是您可以存储,他们只是我们最不希望以这种形式使用它们,好吧,我们很抱歉。
关于所有的破坏和手指的所有碰撞我都没有,我又有一次中断,希望我能以某种方式将此归咎于Mac,这样对,我运行的是Linux,所以没有任何意义,但是大多数事情还是苹果的错,好的。
所以我不会花更多时间在C字符串上,我想让你摆脱的是,有些奇怪的事情,可能会看到您在做什么,而您似乎在做些无辜的事情,代码,但是您得到了一个非常奇怪的结果,如果发生这种情况,我只是想,这个小灯泡继续发光。
我等一下马蒂告诉我,关于这两种琴弦有些奇怪的事情,也许去看看,这些幻灯片会仔细检查您是否正在,您的代码,如果可以,请尽量避免,想出了一个不同的模式,我认为这是第一件事。
可以避免这种奇怪的事情是只要在使用字符串时,如果您要进行任何类型的操作,则可以将其存储在字符串变量中,太极端了,请不要尝试在引号中操作字符串。 ,存储这是您可以做的第一件事,我想避免。
在您的程序中出现怪异字样,所以我想说的是。
我想谈谈今天的幻灯片,是的,所以我想我。
想想也许您的问题是关于这些幻灯片在哪里,我一直在寻找,从上周三的演讲到现在为止的幻灯片,为什么也许很难找到那些星期三的东西,所以阅读,文件是通过称为流的对象完成的,所以我的意思是我假设您已经。
查看了您之前从文件或其他来源读取数据的数据,只是想向您展示如何在C ++中做到这一点,然后我想要,谈论如何使用称为aa网格和向量的数据结构,所以尖括号,所以您知道系统库是否称为F屏幕,该库中的mr。
four文件屏幕,您可以使用两个类,如果在流外流调用这些对象,则这些对象允许您拉字节和,因此从技术上讲,所有这些不同的流都属于这一类别, ,继承层次结构,但我将在稍后的内容中讨论继承。
这些基本上都是具有相似操作的所有相关数据类型,如果要查找所有不同的方法和事物,可以执行,您可以查看C ++文档,并详细了解它们。 ,向您展示他们认为可以用来读取文件的一些方法,在此类中。
如果您创建文件流,则可以打开给定的文件,然后,然后,一旦打开它,就会有一些不同的时间来读取一半的,文件,然后像您到达末尾一样关闭,文件,但是我是否无法打开文件,有一些类似的东西。
你可以用蓝色做的是我认为你使用得最好的,所以我认为看这个不是超级有帮助,我认为看一个例子是,更有用,所以让我向您展示一张带有示例的幻灯片,这是一个非常典型的例子,包含F流库的文件读取示例,您声明了一个。
类型变量,如果您只是写一个文件名,则流式播放您的公开诗歌文本,在该目录中,它将转到您正在运行代码的目录,因此,在我们的项目中,这可能就是我们所说的,但您也可以将,像斜线一样的路径。
如果要现在将文件正斜线,则将斜线点,从该文档中读取,然后从中实际读取数据的方式,该文件看起来可能与Java或JavaScript或,无论您声明一个名为line的变量,然后在获取line时说,打印这一行。
使这行代码与这个循环在这里是,它从输入中读取行并将其存储在该变量中,看起来有点奇怪,这不是代码构造的方式吗? ,关于这个功能的参数是那些,好吧,那是正确的。
我对我之前说的get line方法还有什么了解,变得盲目,那么get line方法的返回类型是什么,是的,如果它能够成功地在线阅读并且基本上返回true ,如果不是。
则返回false循环将读取该行并将其存储在该行中,行变量并返回true,否则将无法读取该行并返回false ,在这种情况下,循环将不再重复, ,代码,但这就是您在C ++中用多种语言读取文件的方式。
您有点打开文件读取对象,然后说出类似,食尸鬼重新绑定了更多的流线或类似内容,有点不同,但这是在同一行读取一行的想法,时间还可以,另一件事看起来与其他语言略有不同,就像我说的是,如果流输入打开。
则看起来与,像Java这样的东西,您可能会说得好,再加上您不这样做,您只会,说出类型和名称分号,对我来说,他现在就可以使用了,我希望可以在其中,我们在这里有不同的语法,是的,他的问题是。
如果我尝试打开文件但不起作用怎么办? ,知道它在Java中失败了吗? ,语言以及如何检查这些错误,我将告诉您,想想一两张幻灯片,我会回答说,基本上有一个,您可以询问文件是否无法打开的方法,但是无论如何。
这是。
读取文件模式,所以让我去找可爱的创作者,我有一个文件,这里称为读取文件点CPP,然后我在其他,文件我有这个资源文件夹,其中有一些不同的文件,就像我,有葛底斯堡地址,我有一些刘易斯·卡洛尔,你通过。
窥镜类型的东西,所以如果我想读这篇文章,我可以加入EF ,流,然后我可以做一些类似您知道的字符串的操作,实际上我,猜猜我必须先打开文件,如果流输入可以调用任何文件,如果我想阅读刚才查看的文件。
则需要输入打开的Carol点txt ,现在,我可以从输入中获得一行并将其放入行中,变量我在那之前有一条声明行,我会知道你是否知道,这是一个冒号线句柄,所以这样的事情我不认为。
我想起了我那小小的弯曲的操作员,在这里我的鳄鱼所以我现在跑步,这个,它说这是一行,并且我每次打印一行,正确读取文件,因此您可以进行各种操作,这种权利就像如果您只想计算文件中的行数,您说int行等于零。
然后在这里说行加号和,那么你知道看到总行数就是这样,正确的是,您可以对文件进行各种各样的处理,很简单,您只需计算行数,以此类推,嗯,您知道,提到像如果文件不存在怎么办,如果我像卡罗尔这样写,点txt。
而我拼写错误的字词比您所看到的要多,总行数为零,因此程序不喜欢崩溃或它们只是,像Java,如果您尝试打开文件不存在整个程序,例如,爆炸,您的硬盘驱动器开始熔化,或者我认为计算机。
开始自动为您或我不知道的东西开采比特币,但我,想到我应该去上课, OTO挖矿时去挖比特币我会很富有,但我不够聪明,可以正常工作,但是无论如何,如果您无法,打开文件,然后当您尝试从文件中读取一行时。
立即失败,所以我的循环从未真正进入正确的状态,而是我将如何,检查是否有一个叫做fail的方法,就像布尔值一样。
您尝试对该文件做的最后一件事失败了,所以我可以说,如果。
输入处于失败状态,那么我可以说你知道, womp-womp或其他任何我可以收获的错误,但是我可以做的所有事情,是的,但是如果没有失败,我可以尝试像这样读取文件的行。
所以我认为Carroll点文字会说womp womp,然后如果我将其拼写为,用O的正确方式,它会立即从火中读取此内容,这是一种,问题的答案,嗯,好吧,反正这很普遍。
一次读取一行的样式,样式下还有另一行,人们有时会写东西,我认为这太微妙了,以至于您真的不知道自己是否,还没读过这本书,那么如果,您尝试做的最后一件事是失败的,因此,如果您考虑一些,分钟,您将意识到。
这段代码,所以它就像最后一个空行,它不应该在这里或取决于您,读取,因为如果您在其中编写代码,基本上它会循环两个人一次,这是很普通的事情,我猜我必须说三行,只是真正复制此模板。
这是如何阅读它们的格式可以使用,我认为getline作为您的循环测试不要使用失败或在文件中作为您的循环测试,就工作和正确而言,这也很好,是的,但是就像,您在计算需要确保不循环的行数,很多次。
因为您计算的cuz会减少一个,这样的事情还可以,所以,如果您想读取少于一行的内容,这就是读取行数的方法,只是阅读单词输入标记,我们有时会谈论标记输入,这意味着寻找空白并在两者之间切分输入。
空格空格实际上可以是空格字符,制表符可能是换行符,任何这些的任何组合都称为,空格分隔,所以这是这笔钱的数据文件示例,好久了,所有的空间都有趣,所以如果您打开文件,使用get行的方法。
您实际上可以使用大于大于大于运算符,从输入中读取内容并将其存储到字符串变量中,它将,一次读一个单词,而不是一次一行,所以你把箭头词读了这个词打sn事件变量,所以它得到了马蒂。
现在我要做的是这次我再次使用,一个it变量注意,我说的是每个输入箭头,因此它实际上读取下一个,输入的令牌对我来说将其转换为int,并将其放入该变量,如果,输入的下一个标记不是您可以将其视为int的东西。
一个单词或其他东西,它将失败,并将其保留为零, ,该令牌的非空白内容的一部分,这样您就可以,读这个单词,另一个有趣的事情是整体操作,应用,因此您实际上可以将其用作if测试或while测试,因此实际上。
最后一个循环的类似格式,如果我有,而不是行,该怎么办,正要数单词,所以如果我代替此行而不是我称呼此标记或,所以我顺便读了一些记号,你看到我是怎么做到的,我这样做是不是太酷了,就像我按班次可以改名字一样。
ctrl R,无论如何,如果您说代币,它都会重命名um,我是如何学习的,我不是我不是魔法,只是右键单击,就像重构,重命名,如果您查看这些菜单,则可以在此处找到所需的热键。 ,所以无论如何。
如果您在输入箭头标记时说,基本上意味着,当我成功读取来自,输入继续进行,所以它说要当心我儿子Jabberwock,注意一点,逗号在正确的单词上,应该说全部单词,但这是我正在阅读,一次输入一个单词。
它不在乎之间有多少空格,就像我进来,然后说朱布朱鸟,你知道如果你在这里放不同的东西,你会知道它不会破裂,我更改间距,它仍然有22个单词,因为它只是跳过所有单词,空格好吧,是的。
较大的正负号表示流提取是什么意思。
运算符,您可以在文件上使用它,这意味着像从该位置提取数据并将其作为参考,变量在右边,所以提取一个数据是否,它是一个令牌或一个int或存储在该内存位置中的任何内容,变量。
这与找出我们少于多少东西的情况相反,像发送信息,只是报价,是不是。
如果我有一个像这样的东西,然后我有一个,美元符号或其他任何符号,然后我拥有此符号或诸如此类的符号,是的,它将所有这些东西都视为一个单词,因为它只是寻找一个,周围有空格的字符序列以及该序列,变成灰褐色。
回到您下注的幻灯片。
哦,是的,如果我没有做任何除法,如果您在,如果您只是将输入的箭头词放到原处,则将其重复表示,发生的事情是他会读12,但它是流引用12,所以我们,会将12存储为带有字符1 2的流,是的。
所以我认为当数据格式不匹配时会变得棘手。
您正在尝试这样做,如果我改为说int令牌,那么我认为,您会看到它尝试读取要提防的文件的第一个令牌,它尝试将其作为整数返回给我,但未成功,因此没有,修改该int变量,此测试的布尔类型表示,失败了。
所以我会是个错误,所以while循环基本上停止了,如果您,尝试以错误的方式阅读不成功,而您的操作只是,基本上会失败,因此如果成功,基于该成功的循环将停止运行,您想跳过它,或者您必须要做的是。
以字符串的形式读取每个字符串,并且在我们的库中有一个名为string的方法,整数,所以如果这个东西可以变成int,就必须说得很好,然后int N等于整数或字符串到整数令牌,然后我说, int令牌是。
所以就像如果我返回文件,则42 Jabar晃动我的文件,儿子的7个颚咬住了19个爪子,它们抓住了所有正确的东西,所以现在大声疾呼,我怎么把这些整数和字符串过滤到,整数还是未找到。
您认为包含我认为是的东西是什么错误,来自sturer lib,您可能会说jeez我如何保持所有这些库的直通,别担心,我给你做作业我已经为你准备好了所有东西,没关系,所以在这里说嘿令牌是42。
所以它能够告诉,哪些令牌在Sanh中,哪些没有问题,是的,是的,如果分隔符不是空格怎么办,我会忘记如何做,有一种方法可以做到,如果您想分开,我从不使用它,除了空格,我们实际上还有一个可以调用的方法。
称为字符串拆分,然后使用字符串和定界符,它将返回令牌列表,因此,我要做的是,我只用绿色这个字就读了整行,然后我打电话,弹簧就行了,然后我得到了所有零件的组合,所以我只用,当我想在空格上分割时。
如果我想在某些东西上分割,那不是,我不尝试弯曲以使用其他拆分方法的空格,我们今天不需要拆分字符串,但是如果您在,逐个读取令牌会丢失空白的含义,因此您,如果您关心行的位置,实际上不知道换行符在哪里。
休息时间是您应该逐行阅读,然后您说的很好,但在,行,我希望令牌有一些方法可以使屏幕读取一个,行,或者您可以使用for循环逐行地遍历行的字符,然后抓住括号I,然后以这种方式查看字符,以便您,换行符。
但您也很关心换行符的内容,可以做类似这样的组合方法,好吧,我不要,花大量时间阅读文件,因为我一般认为。
依序阅读一些东西,然后看片是你的事情,应该有一些不需要的读取文件方法,现在可以解决这些问题,但是有一些方法可以用来创建和测试,目录和删除文件,这里有可以帮助您的方法,与文件相关的东西,还有一个文件存在。
就像我告诉你的那样,我检查打开是否失败的示例,我什至可以避免,通过首先询问文件是否存在然后我错误地打开文件,不必等待它失败,因此您可以执行其他操作,我想现在谈,但是剩下的课我想谈谈我们。
下周将详细讨论收藏,我假设您,参加此类课程的人有点用集合来存储数据,所以说集合,我的意思是像一个数组,一个ArrayList,一个hashmap之类的东西,字典我只是某种方式来存储多个数据,一件事。
一个变量,我假设如果您没有,我之前已经看过,希望您能达到五个并熟悉它,概念上,我们基本上一个集合是潜在多个对象之后的一个对象,数据元素有时您称其为数据结构,即您存储的事物。
集合内部被称为C ++中集合的元素,是一个集合库,其语言称为,标准模板库STL,它非常强大,功能非常强大,在斯坦福大学学习这门课程的人,认为这套内置收藏对学生来说很难,了解如果您做了某件事。
它不会给您很好的错误信息,错误的是,某些事情很容易克服崩溃和他们认为的错误,学习不是很好,所以我们在这里有自己的收藏集,我们称其为Stanford C ++库SPL而不是Sto的Stanford,因为。
这一点都不令人困惑,我们有自己的收藏夹,我们想使用,那些在这门课程中的人,有些人听到后会产生强烈的反应,这些信息,他们说我不想学习斯坦福的东西,我想,学习真正的C ++停止知识,我同情这种心态。
但我想我,会说如果您想学习真正的东西,我会在课程结束时教给您,我们首先学习简单的东西之后的课程,如果您真的,真的想学习真正的东西,你可以参加106年级的,现在提供,他们进行债务的真正收集,所以它不是。
如果您愿意,您不可能在这所大学学习这些东西,但是我们,认为我们的系列更适合于学习,因为它们更简单,更好的错误消息之类的东西,所以我将向您展示一些,现在这些集合以及如何在程序中使用它们。
我想向您展示的集合称为向量向量有时称为向量, list或ArrayList(如果您做了工作),我使用ArrayList向量几乎就像一个,难以评分,因此向量是元素的集合,这些元素的索引以零开头。
向量最酷的地方是它可以改变大小,您可以向其中添加东西,它会增长,您可以从中删除内容,并且会以Java等某些语言出现条纹,有一个叫做数组的集合,它的大小是固定的,不能改变,如果您选择向量的大小。
则可以克服该限制,来自JavaScript的JavaScript调整大小的内置数组,因此您可以,去一个向量由任何词向量声明,然后将要存储的元素类型放入列表中,我将有一个整数列表。
或者您可以建立整数的内容,随着时间的流逝,矢量会不断增长,以增加矢量的内容,所以我添加了炖肉,我吃了马蒂,插入IDI,随着程序的进行,我可以使事情发展,这就是,如果您来自Java,向量又是。
您只需要声明它是分号列表就可以了,它是空的,已经准备好了,使用还可以,为什么不使用数组,向量基本上就是一个数组短,答案数组在C ++中吹响,它从某个著名人物那里得到了提示。
是C ++中的船舶呼叫数据结构哦,太早了,让我们不再谈论它,嗯,我冒犯了人们,C ++中的数组不好,它们不能很好地工作, ,如果您做错了事,则没有太多功能,这无济于事,您修复它会导致非常奇怪的错误。
特别是C ++具有此功能,它被称为不做边界检查,所以如果你做一个大小数组, 5然后转到元素6或7或8,即使没有元素,它也可以让您,它只是进入那个记忆中会发生的一切,然后说到这里,它给你。
所以这可能是垃圾,或者可能崩溃或各种,不好的事情,所以数组是不好的,我们不喜欢它们,向量避免了其中的某些事情,我们不打算在课堂上稍后使用竞赛,我们可能会稍微使用数组,好吧,无论如何在C ++中有数组。
它们很烂,我们不会使用它们,所以,这是向量具有的一些方法,可以添加元素,可以,可以删除内容,可以清除内容,可以设置并获取值,您可以使用更少的索引来打印不同的索引,除非一个或两个运算符,字符串方法。
如果您在, Java,它几乎是完全相同的一组方法,因此非常酷,就像。
回到我的文件程序中,您必须包含较少的向量H,但是,可以做类似嘿的事情,我想存储所有您可以说的令牌,向量字符串所有单词,然后当您阅读每个单词时,您可以将所有单词相加,单词或令牌,或者我所说的任何东西。
您都可以阅读其中的每个单词,将其存储在向量中,然后当您完成操作时可以说这里是,总而言之,endl并将其全部打印在一个大列表中,所以我有。
我可以环顾他们的话我可以看着他们我可以对它们进行排序我可以做各种各样的事情,很好的东西,它们现在存储在列表中,好吧,很多方法,我。
不会说如果您之前使用过这样的结构,他们会非常困惑,所以我不会在每个文档上花费大量时间,在课程网站上,如果您单击stanford c ++库链接,则存在链接,如果您对它们有好奇心。
可以将所有这些东西的文档,您想遍历向量的元素以对每个元素做某事或,检查每一个或打印每一个这里有一些方法可以做到,您读了从0到向量大小的for循环,因为您知道,第一个索引是数字0。
最后一个索引是大小减去1,所以如果您去,小于大小,它会增加大小减去1,这就是您想要的循环,在元素上转到元素I Prine元素,您会注意到您,说的意思是我把那个里面的支架换成循环吃巧克力吗。
记住如果使用盲文可以访问元素或dudx,请记住,说点让你不要来,如果你是从AJ来的,那没关系,嗯,但是在Java中,您必须关闭方法和帮派才能访问内容,作为C ++中的索引。
您可以像使用字符串一样使用方括号,以及其他任何类型的数据,都可以,因此您可以打印,元素,如果您想向后看,则反向打印元素,顺序中每个都有一个叫做a的东西,所以语法有点,清洁程序。
您不必使用所有索引和for循环标头语法, ,只有当您要开始结束时它才有效,或只是想从头到尾循环一遍,这是人们想要的最常见的模式,因此简短的语法有助于,您可以更轻松地编写该模式,我的一般规则是。
如果我可以使用最后一个,我会使用语法,但如果没有,我会使用其他语法,这就是我的想法, ,我认为Java和JavaScript都具有这种增强器的简称,在他们的风格正确,如果在向量中添加和删除内容。
向量会将内容移位到,腾出空间,所以这也类似于Java中的ArrayList或其他(如果您说) ,在X中插入值42,索引号2中的42是什么,所以您得到了,图片在右上角,所以如果要将值从9更改为42 。
不添加任何内容就可以说设置为2逗号,但是插入,将东西移到凉爽的地方,这也使房间成为被移除的地方,元素曾经是我们稍后将在本课程中讨论的一件事,正在转移,这需要时间,如果向量很大,则将其删除。
向量早期的某些事情,它必须做很多工作才能完成所有这些转变,我们稍后再讨论这是我们接下来要谈到的效率,一周后的一周,但这是有用的行为,重要的是要知道矢量可以做到这一点,所以我只想简单地触摸一下。
在vector上,我下周要回到vector,但我想展示一下,你们今天有两个收藏,一个很快,我想展示下一个,您被称为网格,您将在家庭作业中更多地使用网格,所以这就是为什么。
希望在课堂上剩余的时间里谈论伟大的矩形结构,存储数据,因此,如果您像矢量一样声明网格,则将那些,表示要在网格中存储什么类型的元素的括号,然后,构造它时或以后,您必须在行和列中指定大小。
如果您想稍后再调整大小,则有一个调整大小的方法,但是您说,行用逗号分隔列数,所以这是三行,然后如果要,设置或获取给定索引处的值,请使用两组方括号,以便,第一个括号是该行,第二个括号是。
有时人们会混淆索引,因为第一个索引,就像该行,因此第二个索引是两列,所以如果您在想,更像是XY,更像是为什么,第一个索引,X是第二个索引,但我只是将其认为是, XY我试图将其视为行列。
因此无论如何每个家庭都可以使用,该括号语法,例如我在幻灯片上的位置较高,所以为什么要,当你有矢量的时候,有时候你想开始,您想要存储学生及其作业列表的二维事物,等级或任何二维数据,可能是XY 。
像这样正确地协调数据,因此可以向量一维,最大的二维有些学生问,例如我可以使用向量,矢量而不是网格是的,我想是的,但是我的意思是,成绩有点像,它的简短形式,它具有一些方便的语法和方法。
对于这种类型的过程问题很有帮助,所以我认为如果您愿意,尺寸标注的东西,我想您最想要的是网格,下面是,网格通常使您创建了一个越来越大的尺寸,然后您就可以访问这些,边缘,但也有一些有用的方法。
例如有一个入站方法,你是说这个索引是否在网格边界内,访问索引超出范围将导致程序崩溃并显示错误消息,引发异常,您可以询问可以的行数和列数,调整网格的大小,您可以将网格打印出来,从而可以处理很多有趣的事情。
网格um,如果您想遍历网格的内容,则知道,您可以通过各种不同的方式来遍历我谈论过的矢量的方法,从头到尾,如果要循环播放,则从头到尾进行操作,在网格上,您可能要执行的最常见方法是行专业,或专栏主要行。
如果您看图片,没有从左到右的顺序,让我们按主要顺序进行操作,其中行是主要的,索引,因此如果您要按行主要顺序循环,则基本上可以使用外部,在行上循环,在列上循环,然后在主体中执行,该单元格的内容。
或者如果您想执行行主要订单,则可以使用,如果您不关心索引,那么增强的语法将循环简短的语法,本身,如果您想成为专业学生,就可以使用增强循环,反转循环的顺序,所以现在您要循环到我想去的每一列。
向下一列的行我想向下的行,依此类推,嵌套循环先生循环和网格是最好的朋友,如果,您想将集合作为参数传递,无论它是矢量还是,网格或C ++集合中的任何其他集合可能是一件大事,存储很多元素。
它们占用了我们上次学习的大量内存,您可以按值传递事物,可以按引用传递事物,值可以使您要传递的内容完整复制,集合的速度很慢,我们真的不喜欢这么做,所以我们通过了集合,通过引用。
C ++中还有一个名为Const的关键字,它表示常量,这意味着您无法修改只能查看的集合中的值,它们是只读的,因此有时我们将参数声明为常量,想要函数修改我们将要计算的参数值,整数网格中元素的总和为42 。
这个火盆想对我有什么帮助,你在想为什么,你懂,是的,我认为您是对的,但我对&符号说过参考,因为我们,不想复制它并引起,因为我们不会更改它,看一下数字加起来得出总和,所以我认为你是对的。
CD const引用网格是反转网格内容的最佳方法,也许您是将其翻转为另一种方式或类似的方式,通过那一个成型件,关于求逆矩阵,我们说我们想要笼罩我们想要的度数,反转网格,您还可以想象这个版本。
在其中您可以,网格,它是原始图像的倒置版本,您将其返回,但是,我们更经常地修改传递给我们的收藏集,以便,这就是你说我认为你是正确的答案,是的,很好,所以我,不要以为我有时间做这个练习,我想解决一个问题。
你们要写一个骑士可以在棋盘上移动的所有地方,不想让你迟到,尤其是不在星期五,所以让我检查一下,给您的东西在这里找到了哦,不,我没有,嗯,等等。
我先回这儿去维加。
好吧,这是我要做的事情,因为我还有几分钟想,简要地告诉您第一个作业是什么,生活的游戏,让我们看看我如何很好地打开它唐娜说你知道我的恐惧,的原因是它会让我做两因素验证,讨厌和你一样讨厌,请不要,不好。
双手合十没有两个因素没有两个因素没有两个因素通知我们确定,作业成为生活的游戏,有一个指向您下载的Sip的链接, ,解压缩,然后在队列创建器中进行操作,还有一个演示可以下载并,运行。
这是一个有效的解决方案,因此您可以尝试一下,看看它如何工作,除了看这个规格,生活游戏是您拥有的游戏,网格上的这些小单元格,如果您在网格上有小单元格, ,使用网格收集来执行此操作,随着时间的推移。
细胞会生长,并根据某些规则生死,有零个邻居,或者有一个邻居,如果有两个或三个邻居,我们就死了,想要错误的规则,如果它有零个或一个邻居,如果有两个就死了,邻居,如果它有三个邻居,它将保持不变。
如果它能够复活,还有更多的东西会死掉,就像你在这个网格上循环一样,单元格,您可以看到周围有多少邻居,它有多少个邻居,并基于细胞的诞生而死亡,而您,随着时间的推移在屏幕上设置动画,以便小单元格形成小图案。
并聚集,生长,收缩和死亡,并取决于初始状态,网格运行程序,所以分配是我让您阅读,存储其初始状态的文件中的网格,输入文件如下所示,五行九列这是初始状态这些是小单元格,现在。
当您使用今天学到的内容从文件中读取该文件后, ,将其存储在网格中,然后遍历它反复更新自身,绘制新状态,这是我们要进行的第一个任务,要在此停留,请度过一个愉快的周末,并通过。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P4:【Lecture 04】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
所以今天的计划是,我们将学习一堆藏品,称它们为DTS抽象数据类型调用,稍后解释该术语的含义,但本周将学习有关我们拥有的所有不同系列的所有信息,在我们周五上映的剧院收藏图书馆家庭作业2中, 。
将要使用这些库来解决不同的编程问题,而您,不幸的是,我们这个星期只有两次讲座,资料,我们在星期一度过了重要的假期,所以我们丢了课,所以我,今天要快一点,这里是一些内容,但希望我们会。
赶上我想发布的一门课程公告是,我们有一个论坛,关于我们的考试,这样您就不必来了,我希望您一周前完成,从星期五起,我会提醒您距离该日期更多的时间,但无论如何,同时,您也将在本周开始您的部分。
你们得到了关于您分配给哪个部分的消息否是,哇,好吧,嘿,这周您有节,有人将您分配给了,房间,虽然也许您不知何故没有收到有关它的消息,部分是今天,所以您应该检查一下,看看您应该已经收到了。
提示您应该做的是,如果您没有该信息,则转到, CS 198网站CS 198点印Verde D u该站点已登录,如果,您在那里登录,应该为您提供有关哪个部分的信息,您要包括日期,时间和房间。
以及部门负责人。
名称是这样,如果您在该网站上找不到该信息,请。
通过网页上的电子邮件联系信息与我和TAS联系,我们会帮助您的,但是如果您不这样做,请今天再次检查,知道,因为你们中的一些人今天晚些时候有一节,好吧,所以,无论如何,就像我说的那样,我们今天将要了解藏品。
所以让我打开。
幻灯片,如果需要的话,这些全部来自教科书第五章,继续阅读我们上次我不打算花时间谈论向量,在向量上花费了大量时间,因为我认为每种语言都有类似的集合,你们这些我希望您在您的书中看到了类似的东西。
自己以前的编程经验,例如Java中的ArrayList ,与JavaScript中的东西几乎相同,您拥有一个数组或一个列表,基本相同的结构大多数语言都具有这种结构,索引以0开头的元素列表。
因此您可以声明一个,向量,您可以在不同的索引处添加元素,成长为适合其中的元素,您可以访问元素,使用方括号,所以我们已经讨论过了,这是我已经向您展示的方法,我不会再拖延了。
滑动我们在这类结构中看到的一件事就是,从结构的不同点插入或删除元素,但是如果您开始,或在中间,如果您删除,它会将内容移到类似的位置以腾出空间,如果您要删除,它会将所有内容移到其他位置以腾出空间。
没有变化的东西,例如,如果我不希望这只脚,在这里,但我想留空,实际上没有办法说,我的意思是我想你可以用零或类似的东西代替八,但您知道您不喜欢删除艾滋病病毒而无处可去,即使在那里被称为零或或。
也必须具有某种价值,像这样的一些人听说过一个特殊的值称为null但为null ,不是int,因此在这种情况下您不能放置null,但是无论如何我们,星期五将要讨论的更多是其中一些的效率,行动。
我在上周五简要提到了这一点,移位需要时间,就像删除向量的第一个元素一样,它必须将所有其他元素移过来,并且您移入的每个元素都需要一个,一定的时间要做,所以向量越大,越多。
您要转移的元素需要花费更多的时间来进行单个插入,或删除权,因此有时会影响您应如何编写代码,您知道,如果可能的话,您主要想从,向量的结尾而不是从前面开始,但是您不能总是写出,这样编码,但是如果可以的话。
您想这样做吗? ,关于那确实有意义,哦,不,不,我在做,它知道向量如何工作,移位如何工作,您可以有嵌套的收藏集,也可以有诸如,向量的向量,所以我在这里有intz向量的向量,然后我添加。
三个向量到我的向量中,所以我称各个向量,行,然后我把它称为BD,所以有点像网格,因为您可以使用两个方括号访问其中的元素,看起来很像访问网格,您会说什么是主要。
网格与网格在可以做什么或不能做什么方面的区别,是的,是的,网格必须是矩形的,所有行的数量必须相同,列,这东西可能是非矩形的,我猜这是一个特殊的东西,您认为三角形可能会多排不同的链接,所以您知道一些。
优点和缺点我会说另一个区别,那就是更多, nitpicky是您知道的语法,您必须编写更多代码行来,声明这个东西初始化它,但是是的,我认为你的答案是最好的,这个允许一个非矩形的形状,但是我只是想做这个。
总的来说,您可以在一个集合中拥有一个集合,可能有C ++允许的集合的集合,谢谢,好的,所以我实际上不会只因为时间而谈论矢量,因为我们失去了周一的讲座,但是现在叫了一个链表,我会。
我很难激发您对这个系列感兴趣的原因,而您,可以插入它,您可以在前面或后面或中间添加内容,诸如您将要使用的解决方案之类的术语,它在某种意义上与向量相同,它可以让您做相同的事情,但不同之处在于内部。
当向量有很大的积木时,列表存储的数据是不同的,内存,基本上是一个数组,用于存储您拥有的所有元素,加上链接列表,它实际上使这些称为对象的小对象,这种相互连接或链接以形成链条的方式,我们将谈论。
在本课程的稍后部分将有更多关于它的内容,这将是您最喜欢的东西,指针喜欢它,问您宿舍中的朋友是否喜欢指针并看到,无论如何,他们说的内部结构不同,存储数据,也许您现在不必为此担心很多,但是。
内部差异会影响您的工作,代码,如果您使用此东西,那么如果您想在其中插入或添加一些东西,这种结构,你知道我在一分钟前刚刚谈到过一个向量,插入一些内容,您必须将元素移至上方以腾出空间。
如果您决定要插入一个结构,则不必这样做,值42,它是列表中的X 3点,您只需加入即可,你知道链表有很多不同的类比,就像每个小盒子都是一个人的电话,而下一个盒子的箭头就像。
您的电话中已经有下一个人的电话号码或类似的信息,因此,如果您想告诉所有人,将会有一个,派对,您都将去角色删除,所以您必须互相呼叫,因为您知道现在是2009年2018年,只是打电话给人们告诉他们。
政党权利,因此第一人称第二人,他们称,第三人称,依此类推,如果您想再介绍一个人,社交圈中,您可以让其中一个人打电话给他们,然后让他们,打电话给下一个人,您不需要做更多的工作,所以,有趣的是。
这意味着该结构可以执行更多操作,效率比向量可以做到的要好,但是要权衡,这件事在,其他某些操作,例如,使用更多的整体内存,比矢量要好,跳到随机元素上不是很好,只是看一下他们的价值观,这种结构并不是很好。
因为,它查找值是它必须从头开始,并且需要步行,直到找到一个值为止,所以如果您的清单很大,那要花一些时间,无论如何,我向您展示这种结构的观点我认为您不需要使用,本课程中链接列表库非常多,但我想谈一谈。
这个想法有时可以用,不同的内部存储空间,它们各有优缺点,因此,实现相同操作的不同方式也称为“ ,简称为ATT的抽象数据类型,因此ATT基本上只需要一组,您希望能够执行的操作我希望能够添加并。
插入并移除并询问尺寸,然后清除您想要的这些不同,方法的基础,因此任何支持这些方法的对象,您可以说它实现了实现该操作集的方法,该抽象数据类型,因此向量和链接提升均支持相同。
我们可以选择将抽象操作集称为该操作集,列表操作,这很有趣,我们将回到这个主题,在这个课程中,这个想法很多,我们会知道我们在,会用它,我们会说哇,这真的很有帮助,我喜欢它如何,运作良好。
也许我们会学习一种或两种或三种不同的方式,在内部工作,看看他们的利弊常常与效率有关,权衡内存使用情况的权衡可以,所以ADC就是这样,我想向您展示我们的图书馆随附的更多收藏吗,有一阵子。
我想把剩下的大部分时间都花在谈论两个,结构称为堆栈和队列,所以它们是有趣的结构,因为,所以我想有一个销售人员,我很难把这个卖给你,产品,如果您要说我不需要我已经拥有的产品,向量我很好。
所以音高对我来说很难,但我想销量,音调如下所示,就像这些结构没有做很多事情,但是,他们所做的事情他们做得很好,他们有效地做到了, ,所以有时候你知道我们会和其他一些结构一起看到这个,一周。
有时灵活性降低意味着更高的效率或更多的动力,其他方式还可以,所以这些结构到底能做什么,让我们来谈谈堆栈,首先,堆栈是一个概念上的集合,您将其视为元素,在集合中以及添加东西时彼此重担,到堆栈中。
您总是在其顶部添加内容,因此,如果您添加像1 2 3 4这样的值,您就会知道穷人添加了最后一个,所以,现在,如果要查看它,它位于堆栈的顶部,元素或或删除元素或类似堆栈的东西,我认为在许多现实世界中。
您都可以访问自己的顶部,像是自助餐厅的盘子,当您拿起盘子或托盘时,拿起盘子里的食物,你通常不去那里,抓住第十个就可以绑上一个,因为很难进入那里,你得到了另一个正确的答案,这有点像你总是。
当您添加或添加时,触摸集合顶部的元素,您正在删除,而我们在谈论添加时会使用不同的术语,并从堆栈中删除我们说当您添加到堆栈中时,将新元素推到其上以及从顶部移除元素时,我们看到我们将其全部弹出。
还有一个名为peek的操作,意味着我要查看堆栈顶部的内容,但我不会删除它,只想看一下它的价值,然后将其用于某些东西, ,就是这样,所有这些东西都知道该怎么做,还有其他一些,像这样的方法有一个堆栈类。
您可以将其导入,您的项目,并具有将弹出和高峰时间推送的方法,还有其他方法,例如,是空的还是大小的,我不知道我是否认为我可以在幻灯片上说,但您可以打印出堆栈以查看内容,也可以看到其外观,就像里面一样。
但就是这样,所有这些都支持这些幻灯片。哦,我会,谈论星期五的基本含义是这些方法的简写,就为什么要为什么要这样的结构而言,运行得非常快,当我们已经有了向量和网格并且,比这强大得多的事情还有很多问题。
基本上可以使用这种类型的数据访问方式,例如,如果您要构建一个,您将要编写的编程语言,对很多语言的编译器进行正确处理,涉及到像,算法,例如,如果您要评估表达式,则知道X加y ,乘以Z。
您通常会推东西然后将它们弹出,然后使用该结构,如果正在运行函数调用,也要评估表达式,在函数的程序中,任何调用函数都是因为函数C ,被调用的函数实际上会为每个函数堆积一堆内存,函数,当您返回时。
它将最后一个函数从该堆栈中弹出,因此,堆栈在计算机科学中出现很多,也许是我最喜欢的攻击方法,当您拥有文字处理程序之类的应用程序时,它就是撤消堆栈,撤消功能基本上是如果,有很多动作。
例如您键入一些可以抓住您的文字,然后您,制成粗体颜色或将粗体表示为动作的字体,然后更改,对齐中心,这是一个动作,您现在说,哦,我要撤消,所以它转到,我要清洁的最后一个动作是将其弹出,并撤消了该动作。
你说哦,我不喜欢这个要点,或者我要再次撤销它,所以它会在这里大笑,所以我以undo作为一个堆栈为例,就像堆栈在计算机科学中出现的很多一样,这些方法,和堆栈外的操作支持,所以这是一个快速的示例。
我制作了这个堆栈,我推了三个值,两个字符串有点混乱,因为我们不,喜欢将其绘制为垂直流,因为这样会占用太多线条,你知道,所以我们从左到右画它,左边是底部, ,就在顶部,因为我们只希望它适合一行。
但不管怎么说,当您弹出东西时,它的最后一个在最右边的顶部,删除并返回最高值,因此第一次弹出时返回而没有,删除当前为负三的顶部元素,然后在最后和,负三者消失了,但是现在它实际上已经从,也可以堆叠。
所以学生经常尝试做几件事,对于不起作用的堆栈,您不能做的一件事就是,通过带有方括号运算符的方括号通过索引访问元素,不适用于那种循环从0到size访问元素的堆栈, II加号,它不能编译。
我的意思是它违背了,堆栈堆栈不希望您到达堆栈底部,并且,查看任意元素,它只希望您查看顶部的元素,那种代码行不通,所以如果您想看所有,栈中的元素我们怎么看,是,将它们一一弹出,然后看着它们,继续做直到有。
没有元素,所以下面是一个更常见的习惯用法,当堆栈不为空时,弹出顶部元素或对其进行窥视并执行某些操作,这样做的副作用是,当您完成循环时,您会丢失堆栈中的内容,如果你知道我不知道如果你像真实世界的比喻,说。
嘿,我们今天在美食广场上有几张盘子,你打破了,混蛋,然后你做的很好,我们有12我们有12我的意思是零,因为我,打破了他们,我不知道你这样做会清空堆栈,现在当然要小心,您可能会说很好,请耐心等待。
不要将它们从堆栈中删除,对吧,如果我不空的时候只是说,从表面上看这是个好主意,但是当然堆栈永远不会变空,除非你把事情弹出来,否则循环就不会结束,弹出,所以我们有这个问题,就像我如何看一个没有,销毁堆栈。
我们将进行讨论,但这是一个问题,所以我,想向您展示一些使用堆栈的代码,我只是想让您,在你的头上,纸上或其他东西上追踪它,看看是否可以,弄清楚音调,因此,如果您想与自己的说话,请看一下,伙伴一分钟很酷。
然后我会打电话找人来回答,前进,如果您还没有完成操作,您会看到是否有人想帮助我,他必须让事情继续前进,告诉我我不知道的事,我怎么忘了我没有写下正确的答案是什么,但我相信我们可以,一起弄清楚。
所以我们做一个空的栈,这是我要做的,我是视觉人,所以我们在这里制作一个文本框,然后按7 ,然后在七个的顶部,我们推一个10,然后窥视,因此该输出,将会是7或10,因为如果第二次是7 。
所以你知道他们在本季度末让你们评价我,问题就像您认为这位导演了解多少,课程材料我希望您不要在那一刻想起那一刻,回答这个问题,嗯,是的,所以是十个,所以实际上只是知道,输出从十开始将消除答案a和B 。
说D,所以让我们继续前进,我们偷看了十张,然后弹出,它也可以打印十个,但也可以从堆栈中删除十个,现在堆栈只有7个,现在我们推3个和5个,所以这3个,继续,然后右移五个,然后我们将弹出结果打印出来。
是五个,但现在删除了五个,我们要求提供尺寸应为,是两个,所以我的意思是我认为事情从那里继续进行,但是我认为我已经,足够简短的摘要,我想我同意你的观点,我认为你是对的,所以,答案是D,谢谢,是的。
我的意思是基本上这就是堆栈的工作方式,当您有少量um时,此幻灯片上没有很多循环,堆栈会像while循环之类的东西,也许我们会击中,接下来的一秒钟,让我们一起编写一些代码,我想使用堆栈。
检查一段代码中的括号和方括号是否平衡,您知道您的IDE您的软件会执行此操作,就像您打开错误的操作一样,花括号的数量或花括号的顺序错误或其他原因,可以做一个相同过程的非常简化的版本。
我要做的是给你传递一个字符串,看起来有点丑陋, ,应该代表一段代码,看看我们如何一起工作,因为,我希望它适合幻灯片,但您可以想像它的头部,二进制或其他任何东西,但是通过了,您所关心的只是括号和。
代码中的花括号好了,我想要您做的是,看看它们是否正确匹配,所以花括号匹配正确意味着两个,如果有开括号或桥,则需要,一种匹配,在代码右边和后面的顺序中将其他地方关闭。
它们打开和关闭的位置应该与您打开括号时的镜像相同,然后打开花括号您必须先关闭花括号,右括号正确,否则关闭顺序不正确,所以我希望我们的代码检查该函数的总体行为是否,它应该返回,如果有任何问题,则应返回。
发生错误的字符索引,如果没有错误,则应该,返回负数1表示字符串正确,没有错误,所以,这说明这是一个堆栈练习,堆栈如何帮助我解决这个问题,您认为,是的你怎么看,好吧,我认为这是一个非常好的主意。
当您看到开口时他说,括号或花括号开头,也许我们可以推那些字符,放入堆栈中,以便我们记住它们,以便我们知道以后需要匹配它们, ,然后当我们看到一个圆括号时,也许我们弹出,您知道这听起来像,推是打开。
弹出是关闭,我认为这是一个很好的选择。
算法的一般概念,如果您想尝试,让我去找可爱的创作者,这是网站上的zip文件,或者您可以逐步使用代码,网站,所以我要在这里写这个堆栈文件,所以我有一个主要的测试,用一些不同的代码,它说我想要正确的答案是。
,然后我已经准备好我们的函数为空,好吧,好吧,所以你说,推动开场人物,所以我想可以让我们从这里开始,对于字符串中的每个字符,这意味着对于从0到,代码长度字符C是代码括号I,所以我想看一下字符。
CI认为您说的是C是开括号,还是C是开,大括号,您希望我将其放在堆栈中,这样我就没有堆栈了,所以您,要我创建什么类型的堆栈,就像只将这些字符存储在这里,也许您堆叠的字符堆叠好。
让我仔细检查我是否已包括堆栈库,我可以,所以你想要我,做堆叠点按字符C,所以否则您会说,如果它是一个,关闭一个你想要我的,如果是一个关闭的括号或者是一个,关闭花括号然后你要我怎么做。
流行音乐需要做栈顶流行音乐,似乎我们缺少这种想法,多一些人帮我写一些代码是的,所以首先,所以先来看看,我在想什么,看它是否很好,但我认为他们都将打开某种类型的角色,我只是,会在以后推开需要匹配的东西。
所以哦,如果合适的话,好吧,所以让我们说该堆栈将括号存储为一个卷曲的a ,卷曲和括号,然后在这里,如果我碰巧看到您知道关闭,括号或任何我想检查的内容是否与,堆在这里,所以我认为那是你在说的,好吧。
也许在那种情况下,我将它们分开一分钟,那是因为也许我想做的是稍微不同的,结束括号我想说的是栈顶是否为开口,括号是对的,这意味着它们再次匹配,因此功能是什么,应该做的是应该返回索引的int 。
有一个问题吧,所以也许在这种情况下,写我们的,如果不是堆栈顶部的内容,则用另一种方式编码,打开公主这是一个问题吧,所以我应该返回,这是,问题是我该怎么用泰语返回此字符串的索引错误。
该索引处的字符不正确匹配,如果您,有一个大括号,这不是一个大括号,问题,我认为在两种情况下,您都想像我一样突然流行,猜猜你能做的是,你可以说是否合适,然后弹出,但你知道那很不好,所以我会转身。
我想我可以做点什么,类似,但这里的这个使用大括号代替正确的种类,如果他们,如果他们不匹配,则匹配流行音乐,这表明索引不好,好了, ,如果我们一直走到这里,如果您一直到达字符串的末尾,没问题。
所以您应该只返回负数,这样就可以了,太放在循环底部,在那里尝试一下。我有一些测试用例将尝试运行, ,它很崩溃,我要怪我自己,我对此表示歉意,它通过它说索引14处有一个问题。
即0 1 2 3 4 5 6 7 8 9 , 10 11 12 13 14这样关闭卷发就不应该出现了,因为打开,括号匹配正确,所以这似乎在起作用,如果出现这种情况,那么它会崩溃。
它表示尝试偷看一个空堆栈,因此,我不知道我早些时候在描述堆栈时是否真的这么说过,但是如果您尝试弹出或窥视并且堆栈中没有任何内容,则会崩溃,您的程序我不能做,您必须先检查一下,然后才能避免这种情况。
检查堆栈是否为空,为什么您认为这段代码是,崩溃的情况可能与第二个测试用例有关,所以让我,去看看主要的,看看主要的外观第二个测试用例是这个,所以看起来这部分字符串是平衡的这部分字符串是,平衡。
但后来到达这里,我想它在那里突然崩溃了吗,了解为什么它是一个右括号右括号,那时候我们的堆栈没什么好用的,它看到了一个大括号,所以让我们开始吧,如果您看到大括号检查峰值是否是,匹配正确。
所以您了解我们拥有的测试用例FN是空的,那时候我们试图偷看一个空栈,那么解决方法是什么,放弃它,但是确定堆栈大小是否大于零,并且具有,我想说的是右上角的内容,如果它不为空,我认为,清洁剂。
但这也是可以的,所以我想说如果它是空的,不为空,并且顶部元素匹配,所以也许我也将其放在这里,我意识到,这有点多余,我们将在一个,第二,但让我们再次运行它,所以现在实际上更多的代码是,运行正常,这是过去。
这是,通过这个失败了那是怎么回事,第三次测试,所以这里有字符串,我们的代码返回负数,它说没有问题,但是我的测试人员认为那是错误的答案,为什么,那是错的吗,休息的不平衡是的,是的,这是一个很好的答案。
谢谢你,她说我会再说一遍,我们只是,检查匹配项以确保没有人匹配不正确的订单权,很好,我们正在检查,但是还有另一件事应该,像你说的那样检查,每个人都必须关闭,在某个时候结束,所以我们编写的这段代码。
到目前为止还没有检查,我认为您所说的是解决此问题的好方法,到此为止,我们已经看完了所有字符,字符串,因此,如果此时字符串是,有效的是每个打开的人都被关闭,这意味着如果字符串是,如果字符串是好堆栈。
那么这里的堆栈内容应该是什么,分享什么应该是空的每个打开的人都应该弹出,那就是你所说的,基本上我想我应该说的是,如果堆栈为空,我将返回负1,因为,字符串是一个很好的字符串,否则它确实会出现我认为的错误。
Specht希望我们处理的问题是,如果任何花括号从未闭合。
返回字符串的长度,指示问题出在。
结束,所以您知道这很不好,因此实际返回码的长度为,字符串确定,所以现在我们通过所有不同的测试用例,所以无论如何我们都做到了,我只是想和你们一起用堆栈编码,所以我们可以,看到堆栈如何工作,看看它们的行为。
你们有什么,有关我们编写的有关堆栈的代码的一般问题,有关生命的问题,背后的任何东西都是红色的,或者是你扎克,你在做什么,你是我的,部门负责人,哦,等等,这不平衡,等我做错了,我会再运行一次,说了这个哦。
好吧,你是对的,我要继续前进,但是还有一个, bug你来上课纠正我的好事,所以这个字符串是,其实不平衡,对吗?你理解为什么,因为像这部分,一切都很好,但是当我们到达这里时,这是一个括号,那里什么都没有。
我们打开了,您知道我的意思吗,这样不好,所以我们不应该,通过那个,所以,您认为怎么了?为什么我应该怎么做才能修复它? ,抱歉,谁说你在哪儿,我没受伤,你说你可以,评论是,哦,我确实得到了正确的索引。哦。
对不起,好吧,这就是说,错误在索引20上,我认为它在这里,所以这是说我们通过了,因为我们,正确地识别出索引20处的字符串是错误的,所以实际上他是,只是错误的消失是可以的,不,您知道您必须测试测试仪。
有时您必须检查一下以确保测试正确,然后再执行,相信我和我的测试代码,而不必更仔细地看,是的,所以我,认为如果确实看到大括号,我们确实处理了该问题,但没有任何结果,在堆栈上,我们的代码将其标记为错误。
因为这会导致此错误,会说如果我看到一个封闭的花括号,如果堆栈是空的,它将在这里下降,它会说索引是坏索引,我认为无论如何我们还是可以的,关于堆栈的其他问题,是的问题是,如果您弹出堆栈,它也确实会返回值。
但是我,如果您不存储它,则不将其存储在任何地方,只是将其丢弃,如果我想将其弹出并保存并对其进行处理,我可以说像你,知道托顶等于那,我可以在这个特殊的方面做些事情,例如,我做的是偷看它,然后弹出它,因此。
您知道不必存储从pop返回的内容,但是如果,你想很好,我想覆盖队列,所以堆东西在那里,对他们来说不多,但它们支持推弹式的这些基本操作,偷看是空的,它真的非常有效地快速完成所有这些操作,所以我,谈到向量。
现在它们必须移动,在那里可能要花一些时间,是没有可以调用的堆栈操作,它本身会很慢,很好,它只有几个操作,并不能很快完成,所以让我们来看一下。
另一种称为队列的结构与堆栈队列有点类似,就像排队一样,排队等候的人,例如在餐厅午餐排队或,诸如此类,在其中添加元素,然后将它们放入行中,如果,您在现有元素后面添加另一个元素,然后。
您要从队列中删除某些内容,请删除位于的元素,行的最前面,因此您可以添加到结构的后面并删除,从地带的前面,我的意思是我们画画的方式,但对您来说,我想我的手势是向后的。
真的是因为我们通常在屏幕上显示它的方式是, akyüz支持的操作可以添加一些也称为,排队您可以删除也称为排队的东西,您可以,偷看的是,如果您做了一个, DQ操作,如您所见,这真的很像是堆栈。
主要区别在于堆栈的添加和删除都来自,队列的顶部位于同一侧,而添加在一侧,去除是在另一边,所以它有一点细微的差别,所以为什么,您是否想要一个队列,计算机科学中有很多任务, ,想要这样的例子我想很多例子。
有打印机,其他人将作业发送到打印机,打印机需要,在准备每项工作的同时,它不得不将工作排队,而只是处理这些工作,按照他们进入的顺序有很多这样的事情,知道网络路由器,他们有一组要传输的数据包,因此。
他们必须排队,这样他们才能一次全部发送出去,各种示例,您在亚马逊上订购的所有礼物都会被放入,排队的人排队等等,所以这是一个结构,现在再次有用,我认为这个销售点很难,因为您说等待。
事物的列表事物的队列不仅仅是矢量,就像我为什么不,为此使用一个向量,所以我问你一个问题,我为什么不只使用矢量,如果我想在队列中有人,我将它们添加到,向量的末尾,当我要DQ某人时,我将其从。
向量的开始为什么我不那样做,你觉得他说什么,是的,他说如果我一直在不断地改变速度,那是矢量,从前面移走人,我必须转移所有人,这需要,该向量执行此操作的时间,所以我想我没有明确说过,但是。
队列不必执行以下操作: ,您想对您或某人进行DQ,它可以很快完成,因此实际上是一个向量,对于这类任务来说,一个不好的选择会更好,所以无论如何,这些都是,您可能希望在其中排队的程序的位置。
但让我们来看一下,在带有队列的实际编码中,有一个称为队列类的库,导入包含Q点H,它具有我在n之前列出的那些操作,排队,作为DQ,它已经达到峰值,其大小为空,您可以打印出一个,如果需要,请排队。
这是一个简单的示例,此代码旨在,有点像几张幻灯片中的堆栈代码,好吧,所以我说了,关于如何不使用方括号和,索引也适用于您无法到达行中间的队列,并提取出一个元素并查看它,您知道我谈到了队列如何。
就像排队等候,就像您排队等候午餐,然后我,总是想起你知道我在亚利桑那大学上学, ,我在麦当劳佛罗伦萨排队,然后这个大家伙出现了,他只是,就在我等人的正前方,所以我离他刚才的正前方很近。
就像跳到我面前一样,我就像嘿男人,你认为你是,然后他转身去,我是吉尔伯特·阿雷纳斯,我接下来要去攻读MBA ,年他妈的你,我就像吉尔伯特·阿里纳斯一样,前方,你可以完全切在我的面前,我感到非常兴奋, 。
像你们一样,你们篮球队在我面前排成一列,很酷,我的朋友们都很棒,但是没有吉尔伯特·阿里纳斯的规定,在斯坦福队列中,您无法插队,您必须转到行尾,吉尔伯特(Gilbert)就像其他人一样,因为我在最前面。
所以我先走了,的线没有跳到中间没有插入中间没有我们,从中间移动始终在最后添加从前面删除无论如何,因此,如果您想查看提示的元素,甚至可以遍历它们, DQ前面的人并与他们做一些事情,而你又不能只使用,桃子。
因为除非您要从中移除人员,否则提示永远不会变空,它,但您可能会发现限制性,并说哦,天哪,我不想失去我的,人们会看着他们,但大多数情况下,当您使用提示时, ,因为你想把人们抽出来并处理他们。
然后与他们一起完成,这就是重点,因此您不必保留必要的元素,你知道我的意思是当两个地方实际上你想暗示这并没有结束时,确实是一个很大的问题,在某些情况下,我们将讨论。
您希望将队列的大小视为变量而不是循环的地方,直到它为空,如果要打印所有元素,将是一个示例,但是把它们留在那里,你所能做的就是把它们拔出来打印出来,然后,再像这样添加它们,但无论如何有时您必须保留。
队列的大小作为变量来说明我想跳转到,如果您想练习更多的问题,那就是镜子还有另一个问题,逐步的网站代码中存在一些问题,但是此镜像问题,被修改的提示状态,然后这些东西又以相反的顺序再次出现,就是这样。
我想要的是,如果您今天去可爱的创作者项目,我有一个名为Q的文件。
CPP,所以我要做的是从这里重命名main,所以它不会,运行那个,我将在这里打开我的提示文件,是的,所以我要写的是,此处的代码不要看该死的,我在文件中有答案哦,我知道,一切顺利,所以我通过了这个Q 。
与“&”符号的引用意味着如果我在此处修改它,我们将看到,您然后它会改变,所以我们通常通过引用传递这些东西,所以我想,反映内容,您有任何建议如何开始,这是,好的,所以您说过要使用堆栈来帮助我们。
涉及堆栈或队列的问题是有用的结构,另一个通常可以帮助您解决问题的堆栈或队列,你是说我想做一堆叫做stack的字符串,然后做什么,您要我做您要我将队列中的内容移到堆栈中,所以就像当队列不为空时。
从那里拉出一些东西s等于, qdq,然后将其添加到堆栈中如果您想灌入东西,请按push s ,在一起,您可以担负起我的职责,你可以把它剪下来并粘贴成这样,我不知道,撒谎对你来说很难读,但这就像DQ一样。
并推动DQ ,对象放入堆栈中,我将其放回两行版本,但您可以糊涂,一起排成一行就行了,所以在此代码末尾,队列将,里面什么也没有,堆栈将有一个逗号B和C ,右上角的C,我的最终目标是。
如果我只选择ABC CBA, ,该堆栈的内容,然后将它们全部放回到队列中,我将得到什么,就像我在堆栈不为空时那样,字符串s等于堆栈pop,所以在这里,我在这里使用pop的返回值。
然后我做qnq s那里所有代码的最终结果是什么,我认为这听起来不错,您需要打开一些包装, ,说您认为这段代码的作用是产生相反的结果,原始队列让我们真正快速地验证我可以运行它,它应该,哎呀,我没有主队列。
因为我在那里叫它主队列,所以我们,再试一次,所以在美国广播公司之前,在CBA之后,所以你说的完全正确,现在你,建议现在要解决的方法,我稍后会做,但我想,首先要做其他事情,如果我想要转发版本和。
向后版本我以前在开始处有向前版本,所以,一些学生会做的是他们会说嘿我知道Q字符串备份等于Q ,然后像下面一样向下进行备份,然后将Q添加到,现在他们拥有整个东西,有时候还不错,但我想更多。
一个有趣的挑战是我可以解决它而不引入另一个,辅助结构,您已经添加了一个不错的方法来做到这一点,我正在将元素从原始Q中拉出以放入堆栈中,我也可以同时将它们放回原来的Q中,然后放下。
在这里我希望状态是我有ABC,这是这里的正面和背面,这是这里的底部和顶部,所以如果我能使它达到那个状态,那么,第二个while循环将转储C,然后B,然后A ,我将获得理想的结果。
因此是一种幼稚的方式来实现我想要的目标,这将是说好push,但也要说qnq,这也使他重新排队,没错,您已经说过,我会给您一个小问题,第二看,您知道我所知道的这段代码的问题吗,不是你告诉我要做的。
但是你发现这不太正确,这是怎么了,如果我从队列中删除某人,然后将其放回队列中,队列对我来说并不短,所以我永远也不会空着我的循环永远不会,完成,您已经发现了,所以再说一遍对他们有什么解决办法。
正确的您说的是,如果队列中有三个元素,则需要删除,无论这里的人数多少,ADD都会删除三倍的添加房间,那就是我需要这样做的次数,我知道我们将要离开,时间大小等于Q大小,然后对于我等于零的大小。
请执行以下操作: ,很多次,现在在我们的计划结束时,ABC C是一项了不起的工作,所以我会,停在那里检查您的分段时间去。
【斯坦福大学】CS106B C中的抽象编程 · 2018年冬(完结·中英字幕·机翻) - P5:【Lecture 05】CS106B Programming Abstractions in C Win 2018 - 鬼谷良师 - BV1G7411k7jG
好的,所以在星期三,我们讨论的是抽象类型ADT和,我们还讨论了可以在其中使用的不同种类的收藏,斯坦福图书馆中的c ++,我们讨论过向量和链表,关于堆栈和队列的信息,今天我们要讨论更多的集合。
我叫布景和地图,今天第二项作业分配了,想提几件事,所以你知道昨晚巢穴很漂亮,罂粟,你知道典型的大学是前一天晚上,签下这个花花公子的人将会排长队,等待更多的人,我知道,那对你们来说不是很有趣。
但我有个好消息,您可以去,到其他任何一天的巢穴,我只是说如果您早一点开始或,在不同的日子或不同的时间去的人少,帮助更快的一般建议是,如果您较早开始,则需要但嘿,这取决于您,因此作业2也将是一对。
如果您想与合作伙伴一起工作,可以不必,如果您有一个可以与您同在的部门,您可以,好哥们,您和他们不在同一部分,请告诉我们,我们可以,让您进入同一部分,以便您可以一起工作,我们希望。
您在同一部分中是因为很难管理谁,评分,以及如果您有两个不同的部门负责人,谁会与您见面,这是最主要的原因之一,所以就应该这样,我是否强烈建议我做一个伴侣,我认为这是一件非常好的事。
因为它给了您可以与您交谈的人是帮助您工作的人,一起解决所有问题,您会知道这有帮助,你会得到更大的收益,你就必须帮助每个人,在那里您可以使用它,我认为这对,谈一谈您的一些初始问题,坦白地说, ,对您诚实。
当您在这里工作时,它对我们有很大帮助,因为每个人都在*,问题的数量可能是后来人们的一半,受影响的程序数量减少了一半,但触摸屏却没有,对此轻描淡写我的意思是,这意味着如果单元数减少, 。
需要帮助意味着更多的时间,我们可以给任何人更多的帮助,给每个人,所以如果需要帮助,我强烈鼓励合作伙伴和伴侣,寻找合作伙伴,我将在Piazza论坛上发布主题,您可以在其中,寻找合作伙伴。
只是您知道与部门负责人交谈,如果您需要帮助寻找合作伙伴,请与您所在部门的其他人联系,我们知道,我们将尽力帮助您并找出原因,因为我们希望,鼓励我们,我们当然希望您考虑使用该选项。
关于结对编程策略的任何问题您应该做什么,不应该这样做,或者在我们网站的顶部有一个链接,上面写着,配对编程,您可能想阅读那里的一些详细信息答案,我是说一些常见问题,我认为如果您与合作伙伴一起工作, 。
最好的方法是像一起坐着一起努力,我认为不是一个好的解决方案就是喜欢将其拆分,您对您或其他人做了另一部分,我有点理解为什么有些人认为他们想分裂,这样的事情,但我的意思是看看一天结束时。
在相同的东西上测试过,所以如果您只学了一半的材料,因为只有一半的功课您可能还没有做好准备,所以我,认为您会写出更好的程序,如果一起工作,您会学到更多,所以无论如何,这是我对双打的想法。
您是否对以下问题有任何疑问,在我切换到今天的讲座内容之前,不管怎样,都不要考虑,所以今天我们要谈论一些新的。
收集了新的ATT,它们称为集合和地图,希望我能拥有,我要教你一种谈论算法效率的方法,被称为Big O符号,来自第五章。 ,激励我的例子我想计算单词的数量,例如。
圣经或Moby Dick或字典或诸如此类的东西,有很多单词,它有多少个独特的单词,例如,如果您有单词,出现十次我不想算十次我想算什么,所以你怎么做得好,你知道我的外貌我会告诉你。
这个很酷的收藏集叫作Set,但我们假装我们,从来没有听说过,或者没有这样的东西,我们可以使用一些,我们已经了解的集合可以使用向量。
让我们尝试快速地编写该程序,看看结果如何,所以我,要去提示创建者,我今天有一个项目,我有一个文件,这里叫做set CPP,我将其重命名为main,所以我想写这个,基本上称为字数统计的方法。
您传入文件名即可,单词,它将打印出该文件中有多少个唯一单词,所以我已经有了一些代码,我要做的就是,用这个东西这个库,你不需要知道我在哪里可以说开始,然后停下来,然后我可以问一下绑圈的评论,我想看看。
程序运行cuz越快越好,所以好吧,这是文件,想要阅读它,你们知道如何读取不是真正意义的文件,今天的演讲,所以我要一起写一些或写一些,在我们一起工作之前我自己说,所以我只想说你知道流输入。
输入打开的文件名,如果我想计算单词数,则可以从该文件中读取,想一次从文件中读取一个单词吗?我知道该怎么做吗? ,意味着我们过去经常使用get行,但这读了我想要的整行,你还记得念字的方法吗。
你说看到纳粹分子是什么,但我想你的意思是我认为,您在说的就像在箭头中看到语法是,权利索引,但我不会说CN,我会说输入,但是那种,箭头语法以读取单个项目的正确方法,所以您要做的就是,可以说一个字符串词。
然后你可以说我能读一个词,用这个词做某事好吧,这就是读取文件所需要做的全部工作,一次一个词,所以如果我要计算一个集合中的唯一词,可能会有所帮助,为什么我不保留我所收集的所有单词,看到。
然后在我阅读每个其他单词时,将其存储在该集合中,但前提是我之前从未见过,所以请保留所有,独特的话语,再说一分钟,我还是尝试使用,我们已经看过的集合,所以我们可以使用向量来做,我会说所有单词的字符串向量。
所以基本上我可以说所有单词,点加词当然不会强制我们想要的唯一性,对,所以如果我想强制执行唯一性,我可能会说,就像您知道该单词是否已在向量中这样的事,然后将其添加,好的,所以让我们检查一下,如果不是全部。
单词点包含单词或东西包含单词可以,好的词,然后添加好的词,我们去了,现在在底部我,想知道我写了多少个独特的单词,但我的意思是我该怎么办,实际上知道所有单词的点大小是多少,唯一单词的数量。
也许只是为了让您知道我不区分大小写,说像单词等于单词的小写字母,大写字母不会使我们困惑,然后我将打印多少,花费了毫秒,所以我将其编译并运行,并且正在读取, Moby Dick书中的那本书的全文。
我们要等几分钟才能完成,好了,花了11 ,秒计算3万个单词是一个好时机,一个不好的时光,似乎有点慢,似乎花了一段时间,但是,也许那只是最快的速度,我不知道你知道我在做什么。
意思是说11秒太多或破坏得不好那不是很好,尤其是性能,如果我尝试使用另一个更大的文件, ,让我们尝试圣经,让我们做圣经文字,我想是国王詹姆斯,圣经,所以我们运行它是一个更大的文件,它有更多的单词。
我看起来,不想坐在这里等它,但是可能要像一个,整个分钟的时间来读取此文件非常慢,好了,所以我将回到这段代码,在一秒钟后,关键是要有一个比矢量更好的数据结构, 。
可以更有效地解决此问题,这称为定, set是一个集合,如果您尝试向其中添加项目,它不会存储重复项,一个已经在集合中找到的集合,只是不添加它的第二个副本,限制第二个副本进入集合,所以关于一个有趣的事情。
设置是它不支持很多操作,但类似于,您在周三了解到的支持它的用途非常支持他们,高效,因此集合可以支持的核心操作正在添加,删除某物并对其进行测试,现在问是否有东西在集合中,这通常被称为。
召集添加/删除包含现在您放弃了很多其他方法,您可能会有一个非常有效的方法,尤其是我们将放弃,向量的索引考生,就像您知道的那样,您遍历索引,每个元素的索引为零一二三,您可以在中引用它们。
使用那些功能强大的索引的任何订单在您没有的集合中都很好,有没有索引就没有反就没有循环,这样的每个元素都无法做到,我们将讨论为什么会这样,但是如果您愿意放手,我知道在这种结构中,剩下的功能确实非常快。
您在想什么,我想知道程序是否已完成运行,希望他能, alt-tab返回,看看程序是否运行良好,好了,我会完成,我猜花了21秒,所以您知道不是最长的时间吗,世界,但很长一段时间后,我们会回到世界上。
因此在我们的图书馆中,两种类型的集合还记得我在星期三谈论过关于向量的情况,和一部举升机,他们支持我做同样的手术,除了他们有一个,内部结构稍有不同,这意味着某些操作,比其他人快或慢的记忆,我称那是。
ADT的概念以不同的方式实现抽象操作,有一个相似的概念,我们在这里有两个不同的集合,库中集合的类型一种称为集合,另一种称为,半集,它们之间的区别在于哈希集略有不同,更快,所以很好。
但是哈希集不存储任何形式的元素,可预测顺序,而常规集将元素按排序存储,订购,因此取决于您的工作,您可能会更喜欢其中之一,其他如果您愿意牺牲一点速度来进行排序,如果您不关心订单,并且想要,要优化速度。
您应该选择一个哈希集,以便在确定,您需要使用某些操作的一种操作是,评估支持您的问题,问题是剑正确使用的顺序是什么,取决于数据,类型大多数数据类型都有一些自然的排序顺序,例如。
整数按数字顺序从最小数到最大数排序,字符串按字母顺序排序,其中有一些数据,类型实际上没有固有的顺序来排序那些类型,没有命令的订单不能放入常规集合,而必须放入,哈希集,是的,这是一个问题。
但是大多数数据类型,我们将使用常规集在某些情况下对其具有某种顺序,双打,关心,浮标和弦线,它们具有某种自然顺序, ,等于嗯,我一直在这些幻灯片上放这些东西, ,告诉你说“哦”的方法,最后我发誓。
今天的课程与方法的效率有关,但是,支持我在添加/删除之前所说的主要内容,其中包括,核心操作还有其他一些方便之处,但首先,三个是最重要的,还有一些方便的东西,像大小是空的,您可以打印一组以查看该组的内容。
等等,很好看,我想回到我们正在编写的程序,这个程序花了20秒来计算圣经中的单词, 。
回去,我要做的就是更改它,而不是存储向量,在所有单词中,我将使用所有常规单词构成一个集合,或者,哈希集,您认为怎么样,我们可以尝试两者,我认为也许是哈希集,会更好,因为我们并不在乎字符串的存储顺序。
在这里,我只想对它们进行计数,只要它能正确计数它们, ,我所关心的,所以我不会改变其余的,代码,因为散列集具有ADD方法,并且包含method和,所有这些,所以它有一个size方法。
所以我使用它的方式实际上不是,需要更改,我将再次运行它,我们完成了300毫秒, ,快很多,所以您知道百事可乐挑战哈希集赢了,那,常规设置如果您只想要常规位置,一个人花了700毫秒,花了两倍的时间。
但速度仍然更快,比那个向量好吧,现在你可能会说好,我不知道我是否知道订购这些东西-嗯,让我选择一个,较小的输入文件,我不知道该文件是什么,但让我更改一下即可。
像Barney step或D step rah rah rah ,好吧,无论我只是想对这么小的文件重复单词,然后我回到文档,然后将其更改为从小型Moby读取,最初是Moby Dick文件的删节形式。
其原始名称为,该文件不是Moby,但有人指出我应该将其重命名为small ,移动设备,您可能会想到一个um,所以我在这里要做的是,除了发了几个字外,我发誓是一个无辜的错误。
我要花多长时间才能真正打印出这些单词是什么,对于整个Moby Dick文件来说,这样做太大了,但是我可以在这里完成,然后说出所有单词,然后我就打印出收藏集,我发现我找到了Marty和raw。
并对其进行了排序,他们按字母顺序排列,因为我使用了常规集合,而且您知道,只是要确保它确实很清楚让我回到这里说,你知道艾比·克莱德·巴尼·马里亚纳那是我妻子的名字,在其中加上一些其他更好的名称。
现在我想您可以,看到它是按字母顺序从A到Z ,如果您回去,我现在就与您有关集合排序的问题有关,将其切换为哈希集哈希集不将元素存储在任何,特别可预测的顺序,因此如果我使用哈希集重新运行同一程序。
有点像是Abby和Marty混杂在一起,然后是Clyde混杂在一起, ,只是它没有排序,所以如果我在意我应该使用常规集,如果不是,我应该使用散列,所以它说花了零毫秒,所以说了几句话。
它无法检测到运行时间,无论如何,它是如此之快,以至于。
它们提供的这些集合的快速使用方式,因此它们还提供了一些,好的运算符,您可以询问一个集合是否与另一个集合相等,元素彼此之间,您可以做一些长度加倍的事情- ,您可以称之为集合交集和。
区别这些您知道的事情-例如合并两个集合或将它们相交,或从另一个集合中删除一个集合中的所有元素,您可以这样做,你知道可以在一个场景上做一些很好的小操作,如果你想,我将谈论一些你做不到的事情。
带有集合的位置,您无法在I范围从零到大小的范围内循环,好吧,我们看到了每一个都说,您要处理该项目的集合以及执行此操作的原因,那样是因为集合上没有索引操作,就像我想要的那样。
打印出所有我可以回到这里的单词,并为每个字符串单词说出,总而言之,我可以看到这里是一个单词加上单词单词加上Endel, ,它会把它们打印出来吗,那就是如果您要遍历一组,这就是您的操作方式。
并且您知道在遍历矢量时可以,从零开始,到大小,您可以从大小开始,到零,那里,您可以使用很多不同的顺序来遍历元素,您正在遍历一个集,您不应该太在意什么,为了使它们循环遍历。
您实际上无法像这样向后循环遍历集合,容易,我想这个想法是,如果您非常在乎循环顺序和。
的东西,也许你应该使用一个不同的集合,但是无论如何都不能遍历它,与索引设置他们可以做什么,他们不能做什么是的,嗯,问题是我没有保存在幻灯片上的某种东西,嗯,有点像灰色字体,所以从技术上讲,它们是第三种。
称为链接哈希集的集合,它按以下顺序存储元素: ,您添加它们,因此既不是哈希集的随机性,也不是,常规集的肮脏性是插入顺序,但我们不使用它,经常这样,因为它需要更多的内存,并且速度稍慢,但是,完美。
如果您想要一套,但出于某种原因,您非常在意添加它们,以一定的顺序,您希望他们保持该顺序,您可以使用此链接修补集第三个选项的任何其他问题,我认为最主要的是您必须能够弄清楚何时应该使用。
这些不同的结构中的每一个都取决于您遇到的是哪种问题,解决,我的意思是说,在以下情况下,集合非常有用,你真的不想重复你想阻止重复得到,进入代码,或者您想阻止它们,或者您知道自己有一个独特的。
您是否知道是否允许重复或不知道的一套事情,否则您将不会进行大量搜索,我认为核心,集的操作正在搜索其成员资格是,一个集合的集合非常快,向量的contains操作如何。
您认为我以前拥有代码之前在代码中知道的向量吗, vector在这里,我在vector上调用了contains,程序运行正常, ,慢一点,您如何认为向量实际实现包含代码,当我打电话说那里有一百种东西时。
是的,它做了什么,称为顺序搜索,它遍历所有元素,所以当然,您拥有的元素越多,需要的时间就越长,您会遍历更多的东西,您必须搜索更多的东西才能找到一个,回答,如果我们正在处理一个非常大的文件,向量将得到。
每当我们读另一个单词时,我都会看整个向量,再次查看该词是否在其中,您会发现它会很慢,当然,我还没有完全弄清楚的是固定结构和,哈希集结构不需要花太多时间,也不需要做。
他们有很多工作有不同的内部实现方式可以帮助他们,更快地回答这个会员资格问题,我不会教你。
如果您非常好奇,今天将详细介绍如何在内部实施它们,该集合是使用称为二叉树或,二进制搜索树,我们将在后面学习使用以下方式实现哈希集,内部或称为哈希表的结构,我们还将了解,如果您想用谷歌搜索课程。
请稍后再试,您可以设置有关其他任何问题,专门的词汇集,我不认为您真的需要,立即使用它,但它是一个集合,但只存储您知道的字符串,您可以说的in集合,用于设置完整的护理字符串集,词典不要求值类型的任何内容。
因为词典是,如果您不知道在哪里,则隐式地知道墨西哥的字符串,基本上它只是意味着没有定义的字典, ,构成语言一部分的单词列表,我们将回来,稍后在课堂上介绍到此结构,但如果您存储的内容有时会很有用。
是字串或类似的字串,但一组字串是完美的,也足够,所以我不会花任何时间在这个词典上,我想谈的是我想谈的另一种,我们今天要做的收藏,所以我们将学习的最后一个主要的是,称为max。
因此地图有时也称为字典106a不要,记住他们在那里向您介绍了哪些确切的收藏,但是您可以,在JavaScript中使用对象来存储该语言的键值对,如果,您在Java中花了106磅在这里。
您可能已经了解了一种称为哈希的结构,基本上就是地图的地图地图是商店对最多的收藏,我们了解的集合存储了各个数据元素,因此,它们之间的区别是您可以执行的顺序或操作,或者,是否有重复项,但它们存储单个项目。
地图则没有,存储它存储的单个项目,因此您一次添加两件事, ,对有两个部分,一个部分称为键,另一部分称为键,值,所以您先添加头发,然后再提供(如果有) ,部分键,它将查找第二部分的值,所以这是原因。
有时被称为字典,实际上是非常好的,如果已经存储了成对的示例,则可以使用此结构端口,带有定义的单词,然后如果您仅有一个单词,它将查找,与该作品相关联的定义,即地图的用途,可以将数据对关联在一起。
并且隐式地可以做到这一点,很快,您可以快速查找事物,所以我很快就举了一个例子,您将所有这些对添加到自己构建的电话簿中,然后在以后,您想要某人的电话号码,并且您说嘿地图查找该电话号码。
电话号码基本上有很多编程问题的例子,您想基于其他通常是映射的内容查找内容,问题图是非常有用的结构,这里是核心操作的一种,地图基本上与集合有点相似,实际上基本上,添加,删除和搜索。
尽管我在添加这些东西时使用了不同的动词,地图上的东西称为放置,因此如果您将一对添加到,地图,如果他们已经不是那个热配对,它会取代那对,所以你,不能有两对具有相同密钥的密钥,它们必须是唯一密钥。
可以通过调用get来查找与给定键关联的值,就像我叫Marty的名字一样,他的电话号码是什么,请查询,如果您尝试获取该电话的号码,请获取我们的图书馆,不在地图中的键的值,它将返回默认的空值。
零或空字符串或类似我的示例中的内容,一二三四五五六七尖叫如果你说让你认识我或,不在那的人会返回一个空字符串好,最后一个是,删除您传递的密钥,它不仅会删除该密钥,还会删除,与键关联的值,因此。
如果我说要删除Marty,它将删除,马蒂和685对任何人都可以的问题是,确实删除了返回值I ,忘了我不记得它的语言因图书馆而异。
我应该知道的库,因为我维护这些库,但是我不知道,所以,直播,我会觉得我认为它是无效的,它不会返回,所以如果您想要,抓住它,然后还删除它,你会说得到然后你会说。
删除也许我们应该改变图书馆,我到目前为止还不知道如何,您是否对这些核心操作或我的地图有任何疑问? ,我的意思是我知道很多人在106a中都看到过地图,所以也许,有人熟悉你们吗。
你们用106 aj的地图做任何事情吗? ,很酷,所以您说地图对您有意义,我永远也不会厌倦,开个玩笑吧,这就是我们的C ++库中的地图,其中有两种,地图一个称为地图,另一个称为哈希图,因此您了解了哈希。
映射106a(如果您使用Java编写),因此应该是一个熟悉的名称,它具有一个,这两个结构的一组相似的属性紧密地反映了这两种类型,集集和哈希集,您有一个映射和一个哈希映射,它不是。
巧合实际上是因为它们的实现方式非常,同样,我们将在本课程的稍后部分再讨论,地图按键的排列顺序将其对存储在,电话簿示例人们的名字将是排序顺序,而不是,相当快,但是经过排序,散列图甚至更快,但完全。
如果未排序,则会混杂成随机顺序,因此,如果您不关心,为了最大化速度,选择哈希图,我想你问了,关于链接的哈希集,还有一个链接标记匹配,我不认为我把那个,在这里的幻灯片上,但是有一个有趣的事情是当您。
声明地图,如果您来自Java,那么Java会让您编写不同类型的公斤,表示您必须说整数或您写int或double或,一切正常都可以,所以这里是您可以在地图上执行的方法,大小是空的,可以串起所有这类好东西。
我认为我还没有特别强调的一件事是,与其说,得到或放置,您可以只使用方括号使它看起来像一个,向量或数组,而不是说和获取键,您可以说map ,括号键,实际上很像JavaScript。
我想正确的106 aj ,这样做,所以我们也可以这样做,所以这是一个很好的缩写或语法,可能今天在我的一些代码中使用了它,但是任何一种方法都可以,所以,当您想查看地图中的值时,有时您想遍历。
地图并非总是以地图为主要目的,而是用于查找单个事物。 ,时间,但有时您想遍历整个地图,你还开玩笑说伯克利,你可以看看它给出的地图,我的钥匙尖叫着名字,如果您想要助教,也可以使用方括号,查找那些。
就像每个循环在地图上的样子一样,你可以用垫子做的事情是你可以数数你可以计算的东西,这对于您可以走出去很有用,因为您知道我可以通过以下方式将其存储在您的地图中,修改段落这种计数和计数是您的事。
对地图做很多事情,基本上就像是大量的计数器,事实上,让我们现在来看一下,如果您不介意我想回到,从一堆中读取单词并计算文件中的单词,只想计算,很多单词有50,000个单词,或者我想数多少。
出现在文件中的每个唯一单词,所以如果我在做Moby ,迪克然后鲸鱼这个词出现了187次,是556,我想让这些单词中的每一个保持这些计数器不变,所以,我想使用地图来做到这一点。
它的工作方式类似于地图中的商店,配对术语,例如我将要存储在地图中的事物的类型是什么,你怎么看,这些是好的词,是与这些词相关的价值之一,关键伟大伟大整数,单词出现的次数还可以,所以我们必须建立一个。
随着时间的推移,结构会读取文件并使用其数据进行构建,将信息输入到我们的地图中,我该如何处理我认为您拥有的单词,现在该地图应该存储什么的正确想法我该如何阅读每个单词,把它变成那个数据你怎么说,是的。
她有一个正确的主意,他说的是,当我阅读每个字眼时, ,地图中已经有单词,如果没有,我需要将其放入地图中,已经有这个词了,我再看到一个词,所以我需要,增加或增加这个次数,我已经看过这个单词多少次了。
所以我。
认为这个主意会是这样,如果我正在阅读并且发现存在或不存在或,随便什么,如果我看到这个词,我正在阅读这些东西-你知道,本来我的地图上什么都没有,但是在那之后我读了那个词。
认为我想要一个故事就像我已经看过这个词一样-一旦您知道了,那么我,看到B,然后我就很好了,现在我已经看到了-一次,一次我看到了B ,所以你有点那样,我想我有没有,好吧。
不管我们说下一个词是什么-那么我要做的就是我不存储, -的另一份副本:我要存储的副本-:o,你知道B:你知道我的意思,就像把它放在地图上(如果不存在),但如果在地图上,则增加,一个输入就在那里。
这就是您所说的,这就是我想要的,当我使用您提到的结构读取此文件的每个单词时, ,让我们进入我的项目,我有一个名为Maps CPP的文件,我正在阅读。
这里的大文件,我只是从另一个文件中读取了这一部分,一次只写一个,所以现在我只想填写使用,集合,所以您告诉我制作一个从字符串到整数的映射,也许我只是,称它为无数个单词,然后当我阅读您所说的每个单词时。
如果它不在地图中,则该单词不在地图中,如果它在地图中, ,通过一项权利增加其价值,就像您说的那样,如果,它不包含,有一个叫做contains key的方法,所以如果这个键不是,在地图上,关键是什么。
单词是正确的关键字,所以如果这个单词不是,找到添加它,所以单词计数您添加的方式称为放什么我是什么,我应该在这里放入地图中的一对,用逗号隔开,现在我已经看到了,一遍,我以前从未看过它,但是现在,如果它在。
然后将地图存储起来,计数大约为3,我需要去获取,计算并将其更改为4或任何我需要增加1的内容,正确,所以有一个想法你说int count等于word counts不会。
单词go get go查找我已经看过的单词的数量do ,计数加加不会修改地图,我必须将其放回地图,有了新增加的房子,所以单词计数点把单词逗号计数,你知道我的意思吗? ,祝福它不会修改地图。
我必须把它放回去替换,老了,新的好问题,是的,很好的问题,如果您添加一根头发,我不需要删除“否”这个词吗? ,该头发的关键已经找到,它将替换现有的头发,这个词和这对新人一起工作,是的,是的。
我可以一起搬一些吗,是的,我可以先得到,摆脱这个,说计数加一而不是加加,所以下降到二,但是我也可以说不是这个变量只是来自这里,所以我,可以这样说,例如,将其旧值加上一,就可以知道它是新值。
但是我可以变得更加隐身,这可以说你知道,说点的话,实际上您可以在说单词的地方使用这种较短的语法,计算括号中的单词等于一个,等于说放置单词,然后等于一个,一对,这样可以正常工作,不会缩短下面的代码,但是。
语法的工作原理你也可以在这里说单词计数,括号词等于单词计数括号词加一个像这样,旧值加一权利,但您可以将其缩短为一或二,加号加号,这样比较短,如果单词在那里,我们要删除内容。
您实际上无论如何都可以加上加号,它会将它从零变成一,所以你可以那样做,之所以有效,是因为如果这个词不存在,而您尝试加号加上它,它将,静默地添加零计数加2:01,这就是您想要的,首先。
我认为简短的版本有点难以理解,一个新的程序员,所以我会把它放回去,但是如果你很酷而且还可以的话,对我来说,这种语法很好,只是缩短了一点点,那里的代码,嘿,我还没有运行过,所以我计算了所有单词,然后算了。
想要,就像我数完他们之后,我想要做到,所以你可以,输入一个单词进行搜索,然后我将打印出计数,这样,就像int count等于单词计数一样,无论您键入什么单词都可以得到单词,然后,我将打印计数时间。
所以让我直接快速运行它,以便运行,错误的文件对不起,所以如果我去设置让我们改变,这完全不是主要的,然后将地图重命名为主要,我的意思是,应用程序好吧,让我们尝试一下,它正在读取内容,因此。
完成我没有做计时器,但您可以看到它非常快,或者我花了,在圣经中搜索大约一秒钟左右很奇怪,让我们输入呃,时代上帝魔鬼约翰(Johan)不管是什么权利,所以我不是很积极,并不是那不是一个很好的测试案例。
就像II不知道那些计数是否正确,我实际上应该使用较小的文件进行测试,以确保其正常工作,但是我,非常确定这是正确的代码,因此地图非常适合查找这些内容,所有这些计数器都有大量数据,我们可以查询一下计数器。
对于任何给定的单词,马丁怎么样?哦,那是我的名字。 ,我太太的玛丽安娜(Mariana)不在那儿,所以对任何疑问,那个考试哦,是的,哦,是的,如果您的人口像,你好逗号,它将在逗号这个范围内包含一个逗号。
和hello分开是很普通的,我要做的是,在我将小写字母小写之后,就像这里一样,我不喜欢仅仅因为我不太在乎而选择不这样做,你可以杀死我,但如果我真的想要一个好的版本,那你是对的。 ,想要标点符号。
您还说了哈希,我想指出一点,我在这里使用了常规地图,使用哈希映射一直很好,因为我并不真正在乎,方式全部按照我想要的结构进行排序,在稍后计算的地方查找个人,因此哈希映射可能,对于此特定示例稍好一些。
因为向上,这里我没有每个都包含哈希映射,但是我现在可以每个都包含哈希映射点,它应该运行,我认为您不会真正注意到很多差异,只是稍微提示了一下,该版本似乎具有相同的速度,我第一次在斯坦福大学上这堂课的时候。
举这个例子,我把东西跑了,我说好,让我们寻找一些,圣经中的单词,我输入了上帝,它说像-我输入了魔鬼,它说像1,我输入耶稣,说零,我就像,圣经的这个版本是我认为耶稣在。
圣经可能是错的取决于我原来是在用白鲸,档案,我就像圣经中有很多鲸鱼一样有趣,无论如何都是有趣的时光,所以我的意思是我认为您可能已经看过地图了,如果可能的话,在某处或某处相当于地图的结构之前, 6aj。
但我的意思是像所有这些结构一样,我认为重要的是,能够确定何时只要给您一个,问题,我说使用很好的向量,但是如果我给你一个开放的问题,而且我不会告诉您什么是结构化用法,您如何知道是什么开始评论和。
我认为您需要练习思维过程和其中一件事,关于地图,正如我们所说的,我需要将每种此类事物相关联,我是否需要将这种东西彼此关联,根据另一个值查找事物使用此值获得该值,那正是应该引起您说的那种关联关系,哦。
我可能需要一张地图,因为那里有一个问题,可以继续,我为什么要更改我的名字,因为,所以我必须重命名其中一个,所以,在任何给定的项目中只有一个称为均值的函数,所以这就是为什么。
仅仅是C ++项目的局限性一个整体项目,您不能拥有两个,具有相同参数和正确权限的名为main的函数,特别重要的是main,因为它是按顺序运行的那个,要知道从哪里开始运行,必须有一个独特的功能。
取名为int me yeah另外一个,所以我不是想做对,您说它就像向量,更像是一组字符串,您可以添加独特的菌株删除并询问它是否包含东西,所以它有那些,一种相同的核心操作,它像存储的集合一样存储各种顺序。
一些不同的操作具有所谓的前缀搜索,因此您,可以说这组词以Mar开头,如果第二件事, Marty或Mariana会返回批准,因此集词典对于那些,各种问题,是的,我要给你一个简短的答案,只是因为我想保持在。
ADT,选举和他所质疑的东西就像我是否拥有这些,我的项目中有多个文件,它们在其中具有相同的名称,这两个文件都会给我这个错误,例如相同的多个定义,功能,所以在Java或其他语言中,您可能会说出来。
私人的或使他们彼此分开的东西, C ++确实有私有和公共的东西,但是只有在您编写时,类和当前正在编写的类,我们只是在编写一对函数,如果,您有公平的职能,并且希望他们不要冲突,有一个词。
您可以使用称为static的方法,这有点像private,现在它们既可以,具有相似的函数名称,我通常不建议这样做,因为它使,调试器也不了解函数名称是什么以及它是什么,这样做的话,如果发生崩溃。
并不能很好地显示出,函数标题,行和内容,所以我现在要说一下,项目中的文件,只需用不同的函数名命名它们,但是稍后我们将讨论类和对象以及,私人和公共的东西,我想给你看一些。
在完成之前还有更多事情要做,所以我只会花一秒钟,但是,您可以嵌套集合,这样就可以像矢量一样,声明向量事件的元素类型,您可以拥有堆栈映射,你可以有立方体的向量和,正是您想要的。
不需要在这里详细阅读所有这些代码,而是,你想在信使上保留一组人的好友列表我不知道全部,下一张幻灯片,但有一组好友,您如何跟踪每个人的,好友列表或朋友列表,或者说什么好,如果你说嘿,谁是马蒂,朋友。
就像我知道我对Marty感兴趣的人的名字一样,我想要一个,换那个名字,所以就像我想将流的名称与,朋友,所以我想从流中映射两个其他字符串集,以便,这是屏幕通用设置免费地图的地图。
所以您可以添加所有这些朋友,在这里,所以你你知道我一直在教你的所有东西仍在工作,如果您在某个收藏夹或某个收藏夹内有某个收藏夹,则仍然适用,集合语法中的所有这些等式看起来是最奇怪的。
我们的收藏集支持加等于作为点应用程序的同义词,所以它是,基本上与说点应用程序相同,我只剩下几分钟了,所以,我只是想知道您今天开始讲这个话题,但我想谈一谈,所谓的Big O符号算法分析让我给你一个。
简短的版本,我将在星期一继续谈论它,在我的方法表的列上我说的那些小东西,您知道的一些事情可以用不同的方式讨论代码的效率,我想向您展示一个代码示例,请看此示例,现在,其中一些,说语句的一部分,一个语句。
两个语句,三个,我的观点是,如果您查看该代码,并且想要,谈论有多少条语句执行得很好,这里引用了,可以描述总代码的变量,如果您分别查看这两个for循环,则以和作为变量执行,开放是正确的,它们相互嵌套。
所以,总的来说,它将以总速度的n倍n乘以平方,然后,第二个循环好,我们有一个循环,左边和右边有三个语句,所以它有点像是三个的重复,所以n乘以三件事,所以这就像这段代码一样,对任何平方加3并。
n加1个史蒂夫·梦露(Steve Monroe)并不是完美的描述,因为循环将,是加号和东西,所以这不是一个完美的计数器,但这是一个,想法正确,所以重复越多,循环越长,事情将会发生。
所以当我们查看我们研究过的收藏时,如果您,认为该集合具有一个像n个元素的向量一样的元素,如果,您谈论要在向量上执行的操作,必须移开一个粗略地说是字面意思的元素,可能太少了,但是不是很多。
所以我们有时会谈论,我要像跳一样跳到我们身边,我知道我只剩下一分钟了,在这里,但是mm-hmm ,这是它的简写,还是它的速度慢? ,慢n,您可能会说我说的是很多,不同的地方,其中大多数会接近n。
所以那些带有,事情正在试图告诉您采用MIT承诺的哪种方法最快,慢,我们作为程序员在乎这一点,所以我将继续谈论。
星期一有更多的一个愉快的周末下次见。