05 2019 档案

摘要:1、题目描述 输入一个链表,输出该链表中倒数第k个结点。 2、分析 最容易想到的办法就是,遍历一遍链表,得到其长度,然后就可以找到倒数第N个节点。还有一个方法是只遍历一遍链表,使用双指针,用一个指针先走K步,如果此时为空,说明K就是链表长度,这样返回第一个节点就好。如果不为空,这时第二个指针和第一个 阅读全文
posted @ 2019-05-31 19:09 吾之求索 阅读(141) 评论(0) 推荐(0)
摘要:1、题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 2、分析 第一种方法类似与冒泡排序,当偶数在奇数之前则交换。内循环是一趟比较的次数,外循环是一共走的趟数。第二种方法 阅读全文
posted @ 2019-05-31 17:17 吾之求索 阅读(114) 评论(0) 推荐(0)
摘要:1、拥有纯虚函数的基类不可能有实例对象。 2、一般来说,类的数据成员应该被初始化,并且只在构造函数中或类的其他成员函数中指定初值,其他操作都将破坏封装特性。 3、C++中,纯虚函数是可以定义和调用的,但是只能被静态的调用,不能经过虚拟机制来调用。 4、不要将虚析构函数定义为纯虚函数,定义为虚函数比较 阅读全文
posted @ 2019-05-31 11:05 吾之求索 阅读(146) 评论(0) 推荐(0)
摘要:1、虚拟继承中的虚函数机制过于复杂,只建议不要在一个虚基类中定义一个非静态数据成员。 2、对于成员函数的一个测试,测试函数的效能可以得到两个结果:1)inline函数有明显的提升,消除了额外的时间负担,优化版本的inline函数效率更高。2)每多一层继承虚函数执行的时间就有明显的增加,增加继承深度就 阅读全文
posted @ 2019-05-30 11:13 吾之求索 阅读(115) 评论(0) 推荐(0)
摘要:1、相关 前面实现的四部分其实都是为这一章做准备。首先我们来看,STL一共有六大组件:容器、算法、迭代器、仿函数、配接器、配置器。前面迭代器的实现其实只是定义了一些标准,不是真正的迭代器实现,真正的迭代器实现会放在每一个容器里,而容器的实现需要一个基本的功能就是内存分配。这一部分就来实现空间配置器a 阅读全文
posted @ 2019-05-29 21:42 吾之求索 阅读(337) 评论(0) 推荐(0)
摘要:1、题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 2、分析 这个题需要注意的有几点,首先是判断底是否为0,需要重新写一个函数,因为在计算机内部小数其实是不准确的,可以用两数相减大于一个小的数小于一个大的数判断他们是相等的。其 阅读全文
posted @ 2019-05-29 18:01 吾之求索 阅读(106) 评论(0) 推荐(0)
摘要:1、多态对象有某种形式执行期类型判断法,多态其实就是使用一个基类指针寻址出一个派生类对象的意思。 2、识别一个class是否支持多态,唯一的方法就是看它是否有任何虚函数。 1)编译期,找到虚函数表,每个类对象被安插一个由编译器内部产生的指针,指向这个表格。每一个虚函数被指派一个表格索引值。 2)执行 阅读全文
posted @ 2019-05-29 17:31 吾之求索 阅读(126) 评论(0) 推荐(0)
摘要:1、题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 2、分析 书上应该说了三种方法,第一种是将输入的数字不停右移然后与1相与,但这样会牵扯一个问题,如果是负数,会比较麻烦,因为负数右移时要将最高位设置为1,这样最终就会陷入死循环。为了避免这种情况,我们可以不变原来的数据, 阅读全文
posted @ 2019-05-28 18:13 吾之求索 阅读(102) 评论(0) 推荐(0)
摘要:1、题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 2、分析 这道题其实还是一个斐波那契的变形。所以还是比较简单的。 3、代码 4、相关知识点 斐波那契的写法。 阅读全文
posted @ 2019-05-28 17:45 吾之求索 阅读(95) 评论(0) 推荐(0)
摘要:1、题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 2、分析 这个和前面的就有点不一样了,这个题把前几个项写出来,可以直接找到规律,F(n)=2^(n-1)。 3、代码 4、相关知识点 找规律的能力。 阅读全文
posted @ 2019-05-27 18:11 吾之求索 阅读(82) 评论(0) 推荐(0)
摘要:1、题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 2、分析 这道题其实还是一道斐波那契数列的变形,只是前面的项稍微有点变化。 3、代码 4、相关知识点 斐波那契的这种写法一定熟悉。 阅读全文
posted @ 2019-05-27 17:45 吾之求索 阅读(116) 评论(0) 推荐(0)
摘要:1、静态成员函数不可能做到下面两点:1)直接存取非静态成员变量(静态成员函数只属于类本身,随着类的加载而存在,不属于任何对象,是独立存在的,非静态成员当且仅当实例化对象之后才存在,静态成员函数产生在前,非静态成员函数产生在后,故不能访问,内部访问静态成员用::,而访问非静态成员要用this指针,静态 阅读全文
posted @ 2019-05-27 17:22 吾之求索 阅读(125) 评论(0) 推荐(0)
摘要:1、如果打开优化开关,封装就不会带来执行期的效率成本。 2、如下代码: 每一个Point3d 类对象含有三个坐标值,依次序为x,y,z以及一个vptr,static变量会被放在类对象之外。不同的编译器的区别是vptr有可能放在对象的头或者尾。 在这里实际测试和书上有点差异,取一个类的成员变量的地址的 阅读全文
posted @ 2019-05-27 09:55 吾之求索 阅读(101) 评论(0) 推荐(0)
摘要:1、题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 2、分析 这个问题其实已经是一个老生常谈的问题了,最常见的解决办法有三种,第一种就是常见的教科书级别的递归,但是这个有一个很大的问题就是很容易爆栈。第二种是用循环,中间记录上一步计算 阅读全文
posted @ 2019-05-26 16:42 吾之求索 阅读(122) 评论(0) 推荐(0)
摘要:1、题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 2、分析 阅读全文
posted @ 2019-05-24 19:51 吾之求索 阅读(95) 评论(0) 推荐(0)
摘要:1、在C++中一个派生类对象所表现出来的东西其实是自己的成员加上基类的成员的总和,至于派生类成员和基类成员的排列顺序,并不强制指定,大部分编译器基类成员先出现(虚基类除外)。 2、下面讨论四种情况:“单一继承且不含虚函数”,“单一集成并且含有虚函数”,“多重继承”,“虚拟继承”四种情况。 (1)只要 阅读全文
posted @ 2019-05-23 17:22 吾之求索 阅读(114) 评论(0) 推荐(0)
摘要:1、相关 iterator.h文件其实并不涉及具体的哪一个容器的迭代器,只是定义了一些统一的标准,比如迭代器相应的型别,比如一个算法需要用到迭代器所指对象的型别,而怎么获得型别在前面traits编程已经说过。根据经验,最常用到的迭代器的型别有五种,value type,difference type 阅读全文
posted @ 2019-05-22 21:38 吾之求索 阅读(248) 评论(0) 推荐(0)
摘要:1、虚函数继承,派生类赋值给基类 2、分析 首先,创建一个对象则会调用构造函数,创建一个派生类对象时,会先调用基类的构造函数,然后调用派生类自己的构造函数,析构的时候顺序相反。可以将一个派生类对象赋值给基类指针,但是这样会对派生类作出裁剪。也就是上面的base_ptr指向的对象里面没有派生类里独有的 阅读全文
posted @ 2019-05-22 18:45 吾之求索 阅读(317) 评论(0) 推荐(0)
摘要:1、题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 2、分析 熟悉队列和栈的数据结构的特点,最大的不同就是队列是先入先出,而栈是先入后出。现在假设我们先用栈1push进去1,2,3三个元素,然后需要pop,那么pop的应该是1这个元素,那么我们将栈1的 阅读全文
posted @ 2019-05-22 17:25 吾之求索 阅读(99) 评论(0) 推荐(0)
摘要:1、Nonstatic data member在类对象中的排列顺序和声明顺序一样,任何中间介入的static data member都不会被放进对象布局中。 2、同一个access section(也就是private、public、protected区段中),member的排列只需要符合较晚出现的 阅读全文
posted @ 2019-05-22 16:24 吾之求索 阅读(109) 评论(0) 推荐(0)
摘要:1、题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 2、分析 熟悉了二叉树前序和中序的遍历,便知道这 阅读全文
posted @ 2019-05-21 17:26 吾之求索 阅读(79) 评论(0) 推荐(0)
摘要:1、一个空的class,sizeof的大小是1,这是因为编译器为每一个空类安插一个char,使得这一个class的两个对象得以在内存中配置是独一无二的。 2、class的大小和以下三个因素有关: 1)语言本身所造成的额外负担。当语言支持虚基类时,会导致一些额外负担,在派生类中,这个额外的负担反应在某 阅读全文
posted @ 2019-05-21 16:02 吾之求索 阅读(101) 评论(0) 推荐(0)
摘要:1、相关 copy函数在前面内存基本处理工具中使用过,STL中的copy函数是十分复杂的,复制操作不外乎是运用赋值操作或者拷贝构造函数,copy所用的是前面的,有时候传入copy函数的元素型别是trivial assignemnt operator,因此如果能够直接使用内存直接复制行为(memove 阅读全文
posted @ 2019-05-20 21:36 吾之求索 阅读(254) 评论(0) 推荐(0)
摘要:1、题目描述 输入一个链表,从尾到头输出其节点值。 2、分析 这道题很简单,利用一个栈,遍历一遍链表,将节点值push进栈,然后再将栈内元素输出。 3、代码 4、相关知识点 对栈的概念、链表的概念都要熟悉。 阅读全文
posted @ 2019-05-20 17:50 吾之求索 阅读(77) 评论(0) 推荐(0)
摘要:1、在严谨的C++用词中,定义是指占用内存的行为。 2、显示初始化 如上的定义,每一个都明显以x0初始化其对象。那么必要的程序转换有两个阶段,1)重写每一个定义,其中的初始化操作会被剥除。2)类的拷贝构造调用操作被安插进去。这样上面的代码可能会变成下面这样: 上面的x1.X::X(x0)就表现出对拷 阅读全文
posted @ 2019-05-20 10:57 吾之求索 阅读(121) 评论(0) 推荐(0)
摘要:1、题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 2、分析 根据书中的思路,先遍历,统计字符串长度和空格个数,计算新的字符串的长度,然后用两个指针,一个指向新字符串最后一位,一 阅读全文
posted @ 2019-05-19 17:00 吾之求索 阅读(121) 评论(0) 推荐(0)
摘要:1、C++编译器会做很多你不知道的事,比如构造函数的隐式转换,但是可以添加explic关键字用来制止单一参数的构造函数被当作一个转换运算符。 2、当编译器需要一个默认构造函数的时候,被合成出来的构造函数只执行编译器所需的行动。下面四种情况,必须为class合成一个构造函数。 1)当一个class没有 阅读全文
posted @ 2019-05-19 10:20 吾之求索 阅读(129) 评论(0) 推荐(0)
摘要:1、题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 2、分析 在题目中这样的一个二维数组,可以从左下角或者右下角开始,这样每次比较一次就可以排除 阅读全文
posted @ 2019-05-18 15:38 吾之求索 阅读(100) 评论(0) 推荐(0)
摘要:1、相关 很多时候我们需要根据类型的不同来调用不同的函数,在析构和构造工具的实现中,destroy函数有两个版本,第二个版本的实现用到了value_type(first)来获取迭代器的类型,在内存处理工具中,也有很多地方用到这种方式来获得一些模板的类型。其实找到相对应的源码,会发现其实他们是通过模板 阅读全文
posted @ 2019-05-16 20:49 吾之求索 阅读(223) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 这道题的含义是,给出n个数字,这n个数字范围在0-n之间,0-n一共有n+1个数字,找出其中没有出现的数字。一开始想法就是排序,然后二分查找,但是这个不符合题目中的时间空间复杂度。还有一种方法,通过计算,首先计算给出的数字的和,再计算0-n的数字应该有的和,相减就是没有出现的 阅读全文
posted @ 2019-05-16 18:13 吾之求索 阅读(138) 评论(0) 推荐(0)
摘要:一、定义模板 1、函数模板 模板定义以关键字template开始,后跟一个模板参数列表,这是一个逗号分隔的一个或多个模板参数的列表,用<>包围起来。 实例化函数模板 当调用一个函数模板时,编译器会根据函数实参来推断模板实参。 模板类型参数 模板类型参数可以看作类型说明符。类型参数可以用来指定返回类型 阅读全文
posted @ 2019-05-16 17:27 吾之求索 阅读(139) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 判断输入的字符串的括号是否有效,这个其实很简单了,在很早之前学习数据结构时应该都见过,这是典型的栈的应用。首先将左括号都入栈,然后在每碰到一个右括号时,判断栈顶元素是否和这个右括号匹配,如果匹配则pop。不匹配则返回false。最后判断栈是否为空,为空则所有括号都匹配,否则还 阅读全文
posted @ 2019-05-15 17:50 吾之求索 阅读(117) 评论(0) 推荐(0)
摘要:1、相关 STL定义了五个全局函数,作用域为初始化空间上,这样的功能对于容器的实现很有帮助,在后面的容器实现代码中会看到他们的作用,前两个函数是在上一篇实现的用于构造的construct()和用于析构的destroy()。另外三个在本节实现。其中用到几个算法比如copy()和fill()等,将在后面 阅读全文
posted @ 2019-05-15 10:34 吾之求索 阅读(203) 评论(0) 推荐(0)
摘要:1、相关 根据侯捷老师的STL源码解析以及SGI-STL-2.9版本实现。本文是第一篇,实现基本的构造和析构函数。所有相关的注释均在代码中注明,其中所需要的迭代器操作和萃取操作在之后实现,这里需要知道它们的用途。 2、代码 阅读全文
posted @ 2019-05-15 10:29 吾之求索 阅读(241) 评论(0) 推荐(0)
摘要:1、C++兼容C的struct关键字。 2、C中struct更偏于数据封装,C++则不仅仅是封装性还包括了继承性。struct的本身带有public,class本身带有private。 3、在C++中凡是处于同一个access section的数据必定保证其声明顺序在内存的顺序一致,但是不同的acc 阅读全文
posted @ 2019-05-15 10:22 吾之求索 阅读(114) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 实现杨辉三角,输入一个n,n为行数,根据杨辉三角的几个特性,杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1。第行的数字个数为个第行的第个数字为组合数。第行数字和为。除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与右上方两个数字之和(也就是说 阅读全文
posted @ 2019-05-14 17:59 吾之求索 阅读(113) 评论(0) 推荐(0)
摘要:1、将C程序转化为C++封装后,成本其实并没有增加,数据成员放在class和struct中是一样的,成员函数虽然也在class中声明,但是并不会出现在对象中。 2、C++在布局和存取时间上的主要额外负担是由virtual引起的。包括:虚函数(virtual function)机制,用以支持一个有效率 阅读全文
posted @ 2019-05-14 09:37 吾之求索 阅读(127) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 这道题还是一道和二进制、位操作有关的题,将一个数的二进制颠倒。很容易想到的就是,从最后一位开始取,如果为1则先左移1位然后加1,如果为0,则只左移1位。然后再将原来的数右移一位去掉我们已经取过的位。 3、代码 4、相关知识点 位操作,左移,右移。 阅读全文
posted @ 2019-05-12 20:18 吾之求索 阅读(118) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 求两个数的汉明距离,题目中给出了定义,也就是两个数的二进制数中不同的位的个数,这个题和之前求一个数的二进制中的1的个数很像,在求一个数的二进制中的1的个数需要将每一位与1相与,这道题我们也可以这样,将两个数的每一个位分别与1相与,如果结果相同表示两个位相同,不同则计数1,然后 阅读全文
posted @ 2019-05-12 19:18 吾之求索 阅读(101) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 判断一个32位无符号数字中1的个数,应该算比较简单,只要用输入的数字不停地与1相与,结果为1则次数加一,然后将输入数字右移一位,循环32次就好。 3、代码 4、相关知识点 位操作的相关知识。 阅读全文
posted @ 2019-05-11 21:51 吾之求索 阅读(105) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 输入一个字符串,这个字符串是一个罗马数字,将这个罗马数字转为阿拉伯数字。首先罗马数字的字符一共只有那么几个,每一个字符代表一个数字,这样的话就需要判断每一个字符,需要知道对于出现的每一个字符代表的数字是应该加还是减。可以根据罗马数字的规律,会发现,如果后面的字符代表的数字小于 阅读全文
posted @ 2019-05-11 21:00 吾之求索 阅读(118) 评论(0) 推荐(0)
摘要:学习目标: 掌握JavaScript中是定义和初始化变量的方法 掌握JavaScript中的七种数据类型 掌握JavaScript中的作用域原则 理解程序中变量的概念 理解什么是作用域 理解为什么需要有作用域 1、变量 和以前的很多语言是一样的,变量就是用来存储信息的。 javaScript变量:在 阅读全文
posted @ 2019-05-07 09:25 吾之求索 阅读(164) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 这道题使用循环很容易能得到结果,只需要将这个数不停地除以3,最后判断迭代之后的商是否为1。但是题目中说可以不使用循环,那么就需要一点取巧的办法,题目中输入的是一个int型数据,那么int类型正数范围是0-2^31,这个范围内最大的3的次方数是1162261467,这样我们只需 阅读全文
posted @ 2019-05-06 16:21 吾之求索 阅读(132) 评论(0) 推荐(0)
摘要:1、题目描述 2、分析 这道题要求求出给定一个n以内的质数的个数,首先最容易想到的方法那肯定是判断每一个数是不是质数,判断质数有一个取巧的地方是,不需要遍历到这个数本身,只需要遍历到这个数的开方就好。如果是则加1。也就是代码中第一种方法。但是还有一种方法是使用埃拉托斯特尼筛法,它的过程是,2开始遍历 阅读全文
posted @ 2019-05-05 20:00 吾之求索 阅读(142) 评论(0) 推荐(0)