指数,对数,级数,模运算,证明方法。
递归的简单介绍:递归并不是循环逻辑。因为他是从f(5)到f(4),一直下去,而非,从f(5)还在f(5).
所以,递归并不是循环。
当编写递归历程的时候,关键是呀牢记递归的四条基本法则:
(1)基准情形:某些基准情形不用递归就能求解
(2)不断推进:对于那些需要递归求解的情形,总能朝着基准情形方向靠近
(3)设计法则:假设所有的递归调用都能运行
(4)合成效益法则:
1.4 c++类
类由成员组成,成员可以是数据,也可以是函数,其中函数被称为成员函数,类中的每一个实例都是一个对象,每一个对象包含类中指定的数据成员,成员函数用于对象,通常被称为方法。
private:实现信息隐藏
如果一个数据成员是const的,那么数据成员的值就只能在初始化列表里进行初始化,
所有单参数的构造函数都必须是explicit的,以避免后台的类型转换,(?????)
单参数构造函数是explicit的,即使用单参数构造函数声明必须使用圆括号来赋初始值。
常量成员函数:
访问函数:只进行检测但是不改变其对象的状态的成员函数
修改函数:改变其对象的状态的成员函数
默认情况下,都是修改函数,要使其成为访问函数,则需要在参数类型列表结尾的圆括号后加上关键字const
接口通常都放在.h结尾的文件中,需呀接口信息的源代码必须#include接口文件
为了避免出现,编译一个文件时存在一个接口被读两次的危险,(一接口被读两次的危险是???????????)每个头文件在读类接口时需要定义一个预处理器来定义一个符号,接口文件的一行检测该符号是否是未定义的,如果答案是肯定的,则接着处理文件,否则不处理
作用域运算符:“::”
1.5c++细节
三大函数:析构函数,复制构造函数,operator=
析构函数:
当一个对象超出其作用域或者执行delete时,就用析构函数,析构函数的唯一任务就是释放使用对象时所占有的所有资源。
默认操作是对每一个数据成员都是用析构函数
复制构造函数:
有一种特殊的构造函数,用于构造新的对象,被初始化为相同类型对象的一个副本,这就是复制构造函数。
模板:来写类型无关的算法(也成为泛型算法)
函数模板:
函数模板可以应需要自动扩展,在其过程中,会产生大量附加代码,在大项目里,这被称为代码膨胀。
如果有一个模板和一个非模板都可以匹配的话,那么非模板有优先权
定义二维数组:
代码:
#ifndef MATRIX_H
#define MATRIX_H
#include<vector>
using namespace std;
template <typename Object>
class matrix{
public:
matrix(int rows,int cols):array(rows)
{
for(int i=0;i<rows;i++)
array[i].resize(cols);
}
const vector<Object>& operator[](int row) const{
return array[i].resize(cols);
}
vector<Object>& operator[](int row) {
return array[row];
}
int numrows() const{
return array.size();
}
int numrows() const{
return numrows()?array[0].size():0;
private:
vector<vector<Object>> array;
};
#endif
}