《数据结构与算法分析C++》 维斯 第一章 笔记

本文深入探讨了递归的概念及其与C++类的结合应用,详细解释了递归的四条基本法则,并介绍了类的基本组成部分、成员函数的分类(访问函数与修改函数)、接口与预处理器的作用域运算符等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指数,对数,级数,模运算,证明方法。

递归的简单介绍:递归并不是循环逻辑。因为他是从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











}






























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值