此博客用来总结牛客网刷题过程中一些错题,特别是一些自己没有搞懂的、模糊的知识点。会尽量按照知识点来分类。
const
NO.1
|
|
在C++中,a作用域下在C++中所有的常量a在预编译阶段就已经做了类似于宏替换的工作,所以输出的是它的常量值,尽管a所对应的内存地址上的值已经发生改变,但还是输出常量值。
此博客用来总结牛客网刷题过程中一些错题,特别是一些自己没有搞懂的、模糊的知识点。会尽量按照知识点来分类。
|
|
在C++中,a作用域下在C++中所有的常量a在预编译阶段就已经做了类似于宏替换的工作,所以输出的是它的常量值,尽管a所对应的内存地址上的值已经发生改变,但还是输出常量值。
训练神经网络:
简单来说即是:正向传播信号,反向传播误差。通过正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的$h _ {\theta}(y)$。现在,为了计算代价函数的偏导数$\frac{\partial}{\partial\Theta^{(l)} _ {ij}}J\left(\Theta\right)$,我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。
感觉这题比较经典,之前自己用4个指针指来指去,把自己都绕晕了,现在发现2个指针就行。找数组中位数,相当于找第k个元素,k=(nums1.size()+nums2.size())/2。
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
本文转载自鸡啄米,有关模板类的更多特性,可参考C++类模板,你看我就够了
代码复用是面向对象设计中的重要的软件开发思想,对于软件开发效率很是关键。怎样做好代码复用呢?越是通用的代码越好复用,将类型作为参数,这种程序设计类型就是参数化程序设计。模板就是C++进行参数化设计的工具。利用模板我们可以使用同一段程序处理不同类型的对象。
什么是类模板呢?类模板就是为类声明一种模板,使得类中的某些数据成员,或某些成员函数的参数,又或者是某些成员函数的返回值可以取任意的数据类型,包括基本数据类型和自定义数据类型。
本文转载自鸡啄米并略有改动。
抽象类可以为某个类族提供统一的操作接口。外部可以透明的使用抽象类的统一接口,而不需要知道到底是调用的抽象类的哪个派生类的成员函数。其实这些也可以通过在基类中定义虚函数来实现,但抽象类跟一般类不同的是,它使用纯虚函数,不需要定义纯虚函数的实现,而且抽象类不能实例化,即不能定义抽象类的对象,只能从它继承出非抽象派生类再实例化。
抽象类的定义就是,含有纯虚函数的类。纯虚函数跟一般的虚函数有很大不同。我们下面来了解下纯虚函数。
即使有的虚函数在基类中不需要做任何工作,我们也要写出一个空的函数体,这时这个函数体没有什么意义,重要的是此虚函数的原型声明。C++为我们提供了纯虚函数,让我们在这种情况下不用写函数实现,只给出函数原型作为整个类族的统一接口就可以了,函数的实现可以在派生类中给出。
纯虚函数是在基类中声明的,声明形式为:
virtual 函数类型 函数名(参数表) = 0;
大家可以看到,纯虚函数的声明形式与一般虚函数类似,只是最后加了个“=0”。纯虚函数这样声明以后,在基类中就不再给出它的实现了,各个派生类可以根据自己的功能需要定义其实现。
以下博客是我在学习过程中发现的比较好的博客,可以参考:机器学习算法实践-决策树(Decision Tree)、July_sun的博客、HerosOfEarth的博客、天泽28的专栏
借用西瓜书中西瓜问题的一棵决策树,观察可知,决策树主要由若干节点(包括根节点、叶节点、内部节点等)组成。每个内部节点都表示某个属性,叶子节点表示判别结果。
一棵决策树包含许多节点,可以通过递归方式产生新节点。递归终止条件为:
派生类指针指向基类必须经过强制类型转换
|
|
如果基础类和衍生类定义了相同名称的成员函数,那么通过对象指针调用成员函数时,到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定。
简单来说,C++的多态就是靠父类指针指向子类对象+虚函数来实现的。父类指针指向子类对象,可以调用子类从父类继承来的那一部分,但如果父类中声明了virtual,则可以调用子类中的方法,这样就实现了多态。而子类指针指向父类对象,可能会调用到父类中没用的方法,因此这是不对的。
至于两类指针的互换是另一个问题。
本文转载自 http://www.jb51.net/article/63462.htm 、https://blog.csdn.net/ycl295644/article/details/45539193 ,更多资料可参考 https://blog.csdn.net/zx3517288/article/details/48976097
指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
是指派生类重新定义基类的虚函数,特征是:
本文转载自 https://blog.csdn.net/majianfei1023/article/details/45290467
用于函数体内部修饰变量,这种变量的生存期长于该函数。
要明白这个用法,我们首先要了解c/c++的内存分布,以及static所在的区间。
对于一个完整的程序,在内存中的分布情况如下图:
1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用于退出而释放空间。
3.堆区:程序员分配并释放的区域,像malloc(c),new(c++)
3.全局数据区(静态区):全局变量和静态便令的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放。
4.代码区