- 递归的四条基本法则
-
基准情形:无需递归即可解出
-
要有进展:每一次递归必须朝向基准情形
-
设计法则:假设所有递归调用都能运行
-
合成效益法则:求解一个问题的同一实例时,切勿再不同的递归调用中做重复性的操作,比如求解斐波拉契数列会在一次调用中调用两次递归。
2. C++ 构造函数
构造函数用于设置初始值,负责类的初始化。如果没有定义系统会自动调用默认构造函数。
explicit 关键字:主要用于修饰构造函数,表示构造函数不允许隐式调用(=赋值),防止“单参数构造函数”强制类型转换,在编译时进行该项检查。
3. std::move
C++11 提供的函数,并不会移动任何东西,唯一的功能是将一个左值强制转化为右值引用,不会产生内存拷贝,移动后原来的对象内容就会被释放,所以要确保是不会被用到的对象再使用 move 。
push_back(para) 等函数在传参时会对参数对象进行复制(深拷贝),造成内存的额外创建。可以使用 push_back(std::move(para)) 来优化。
tips: 右值引用标识符为 &&
4. operator[]
自己定义 matrix 对象,然后 copy 函数实现复制 matrix, operator[] 返回的是 vector 实体,from 返回的应该是常量引用,而 to 返回的可以是普通引用。
void copy(const matrix<int>& from, matrix<int> to) {
for (int i = 0; i < to.numrows(); i++) {
to[i] = from[i];
}
}