自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 在ROS2-foxy环境中配置nooploop-linktrack

在ROS2-foxy环境中配置nooploop-linktrack

2024-03-29 23:35:42 360

原创 模拟电路PN结:为什么自由电子由N区移动至P区,就有空穴由P区移动至N区?

简单而并不严谨地解释了“自由电子由N区移动至P区,就有空穴由P区移动至N区”

2024-03-04 15:21:04 1011

原创 C++智能指针

较为详细地介绍了C++智能指针,包括 unique_ptr 、shared_ptr 、 weak_ptr 。

2024-02-25 17:04:54 772

原创 C/C++函数指针以及如何解决C++泛型编程中的多样化参数问题

笔者最近需要在ubuntu平台上写一个类似于TimeSetEvent的计时器,实现按一定频率重复执行回调函数的功能。这就需要运用C/C++函数指针的性质。由于笔者希望计时器预留给回调函数的接口可以适配任何函数,所以需要使用C++泛型编程的性质并解决回调函数参数多样化的问题。这篇文章是笔者解决问题的学习笔记和记录,欢迎交流和指正。

2024-01-22 16:30:33 887

原创 cpp多线程(二)——对线程的控制和锁的概念

介绍了操作线程的公共函数和最最简单的mutex锁

2024-01-18 15:58:28 1178

原创 Cpp多线程(一)

对于thread构造函数,其第一个参数为所执行函数的名称(可能是引用),后面的参数则为所执行函数的参数。对于线程,C++用类来描述,创建了一个Thread类的对象,即是新增了一个线程。上面这个例子,我们可以说吗,托thread1的福,thread2也得以运行完毕,但是如果thread2运行得慢一点,那么thread2依旧无法执行完毕。可以看出,位于join之前的one和two还是可以被打印的,而three要等到thread1和thread2执行完毕,才被打印。上面这张图就解释了线程和多线程的意义。

2024-01-17 23:00:00 817

原创 在ubuntu平台上安装minecraft

介绍了在ubuntu系统中安装minecraft的方法

2024-01-14 11:13:40 574

原创 Ubuntu平台上C语言利用matio库读取mat文件

介绍了在ubuntu平台C/C++读取mat文件的方法,包括环境的配置和代码的编写

2024-01-13 10:23:05 618

原创 航专著名物理学渣对于复变函数和积分变换期末试题的研究报告(二)

主要介绍了航专复变函数考试中的证明题

2024-01-01 23:26:24 464

原创 航专著名物理学渣对于复变函数和积分变换期末试题的研究报告(一)

6-7页 收敛域相关的试题。8-9页 展开式相关的试题。

2023-12-31 13:57:02 362 1

原创 物理法求阿基米德螺旋线曲率半径

一种求解阿基米德螺线曲率半径的物理方法,主要运用了运动学定理和小量分析

2023-12-24 23:28:32 769 1

原创 一元线性回归计算·Cpp实现

闲来无事地时候写了一个一元线性回归的类,我上传了源代码和具体的使用方法。显然,这个程序的功能是很弱鸡的,有兴趣的同学可以看一看,玩一玩!

2023-09-08 22:52:56 180

原创 手搓cpp数据结构库·记录1

由于array指针往往被分配了内存空间,而使用值传参调用的默认复制构造函数只会进行浅复制,所以传入参数中的array指针所指空间和原有的array指针所指空间是一致的。而在传参完毕后,这个参数——一个临时构造的myStackNode类对象实例将会按照该类型析构函数释放空间(你肯定规定了析构函数要主动释放array指针所指空间,不然会造成内存泄漏),那么,原有类对象实例的空间会被提前释放。通常多文件编程时,会把类的定义放到头文件中,把类方法的定义放到cpp文件中,只在头文件中留下类方法的声明。

2023-08-30 13:27:37 86

原创 Python迭代器

需要注意的是,除了这两个方法,迭代器还可以实现其他方法,例如__iter__()方法用于初始化迭代器对象。但是,无论迭代器实现了哪些其他方法,只要它实现了__iter__()方法和__next__()方法,并且方法名正确,就可以被认为是迭代器。迭代器必须包含__iter__()方法和__next__()方法,这在下面会详细介绍。根据迭代器协议,一旦类中定义了__iter__()方法和__next__()方法,并且方法名正确,python就会把这个类视为迭代器类。可迭代对象不一定是一个迭代器。

2023-08-19 09:34:03 73

原创 Python修饰器和修饰函数

可以这样理解,@fun_d1修饰的是@fun_d2和fun函数组成的整体,先运行fun_d1中的wrap,直至发现func(),然后开始运行@fun_d2修饰函数。此般操作,相当于不直接执行sort_test函数,而是把sort_test函数作为一个参数传入修饰函数runtime_of_sorttest,然后由修饰函数及其嵌套函数决定其是否执行,何时执行。也就是说,fun_d1中的func参数,代表是@fun_d2和fun函数组成的整体,而fun_d2中的fun参数,代表的是fun啊哈纳树本身!

2023-08-13 18:40:12 434 1

原创 从C到Cpp——十七、抽象基类

如果把Student设置为抽象基类,那么就不允许创建Student对象,只能派生出各种各样的Student子类,比如CS_Student、EE_Student、ME_Student等等,然后创建派生类的对象。尽管set_age函数被声明为虚,而a是Student类型的指针,a->set_age(20)应该调用纯虚函数中的方法,但由于派生类中set_age没有被定义,最终函数还是调用了基类的方法。C++中还有一种基类,它不允许自己被创建具体的对象,但它的派生类可以被创建对象。4--纯虚函数也可以有定义。

2023-07-15 09:33:31 110

原创 从C到Cpp——十六、类继承(二)虚方法和protected访问控制

在正常情况下(也就是类方法不添加任何限定词),派生类类型的指针和引用可以调用基类和派生类的方法(所以它只能指向派生类对象),但基类类型的指针和引用只能调用基类的方法,不管它具体指向的是派生类对象还是基类对象。如果用基类指针指向一个派生类对象,那么本来是只能调用基类方法的,但如果加上virtual,由于现在调用方法的依据是指针或引用真正指向的对象了,所以这个基类指针会调用派生类的方法了!第一个set调用的是基类的方法,第二个set调用的是派生类的方法。派生类类型的指针和引用调用了基类的方法。

2023-07-13 13:33:30 74

原创 从C到Cpp——十五、类继承(一)

试想,如果类A不是你写的,或者是你很久以前写的,你需要为之添加功能,你就需要完整地细读这个类的代码,然后才能做出改动。然而,不能把基类的对象和地址赋给派生类的引用和指针。这个规则是有道理的,如果允许把基类对象赋给派生类的引用,那么就可以给基类对象调用派生类方法了,这显然就不合适了!是C++中的重要概念,类继承的实质是为一个已有类添加成员和方法,使之成为一个更复杂的新类。在定义继承类的时候,利用列表初始化的方法调用基类的普通构造函数,实现基类的构造,然后再把补充部分初始化完毕!你只要关心你增加的功能就行了。

2023-07-11 16:44:44 95

原创 从C到Cpp——十四、类的默认函数以及它们的隐患

对于第二种和第三种,编译器可能调用直接调用复制构造函数,也可能是先利用复制构造函数创建一个名称隐藏的临时对象,然后利用利用默认重载的赋值运算符把值赋予目标对象!由于函数传参是按照值传递的,编译器会先利用复制构造函数创建一个作用域和持续时间仅在这个自定义函数种的临时对象,然后再利用析构函数清除这个临时变量。复制构造函数用于将一个已有的对象复制到新创建的对象中,也就是说,它被用于初始化的过程中,而不是常规的赋值过程中。有趣的是,自定义复制构造函数会覆盖默认构造函数,如果定义了复制构造函数,请自定义构造函数!

2023-07-10 17:33:05 63

原创 从C到Cpp——十三、运算符重载、友元函数和转换函数

由于非成员函数是在类定义外部定义的,且不带作用域解析运算符,那么编译器是能够识别并把运算符按照非成员函数的方式重载的,而不是按照成员函数的方式。由于能重载的运算符只有一元运算符和二元运算符,所以对于二元函数,成员函数最多只有一个参数,非成员函数最多两个参数;由于C++中的结构体可以被当作默认成员属性为public的类(有一定差别,但操作上可以姑且这么认为),所以同样可以进行运算符重载。这里+为被重载的运算符,a为参数。自定义的运算符函数重载实质上是对自定义函数的调用,不过调用的方式是使用已有的普通运算符。

2023-07-07 23:27:38 103

原创 从C到Cpp——十二、类和引用、对象数组和类作用域

类对象和类成员函数(类方法)的作用域都为类,这意味着,在类声明和成员函数定义中,可以直接使用未用作用域限限定符::修饰的变量。也就是说,使用方法的对象,实质上是通过隐式的方法访问的。前面的Student& 说明函数的返回类型是关于Student类的引用,后面的Student param说明传入了一个Student类型的对象作为实参,形参是param!使用类作为函数参数时,通常采用引用的方法。这里,Student是类的名称,name_of_array是对象数组名称,NUM_OF_ARRAY是定义的元素数量。

2023-07-07 16:58:04 115

原创 从C到Cpp——十一、名称空间

如果namespace代码块的前面已经使用using namespace std,则不用加std::前缀,因为using的作用域包括namespace定义;前者就好像在相应的代码块中声明了相应的名称一样,而后者保留了名称空间的层次独立性。对于声明在代码块内的变量,其名称空间为所在的代码块。之所以说是有条件的,是因为函数块/代码块中定义的局部变量会覆盖student::age。3--名称空间可以是全局的,可以在别的名称空间中,但不能在代码块中。4--没有定义名称的名称空间等价于链接性为内部的静态变量!

2023-07-06 10:50:36 72 1

原创 从C到Cpp——十、内存模型

1--自定义函数默认是具有外部链接性的,即源文件a中定义的函数可以在源文件b中使用,函数声明(原型)和函数定义中同时使用关键字static可以使函数只有内部链接性,即只能在某一个源文件中使用。2--和变量一样,静态函数(也就是上面用static定义的函数)也满足覆盖的规则,如果源文件b中定义了某个函数,即使同一项目下的源文件a中已经定义了同名的函数,也不会被源文件b使用!为什么要这么设计呢?如果像下面这样使用,则变量a的链接性为内部,虽然程序运行时该变量始终存在,但仅在该源文件中可以使用变量a。

2023-07-05 11:49:21 90

原创 从C到Cpp——九、Cpp的强大函数特性(二)

对于上面这个片段,在定义myswap模板时并没有生成用于int的交换函数,在main函数中,编译器发现程序确确实实需要交换m和n这两个int型变量时,才生成了相应的函数。在函数声明和定义前加上template <>这一段,并在参数列表前加上<具体化的类型>,就可以实现具体化函数。具体化函数给予编译器一个优先于函数模板的选择,如果存在具体化定义,就不再使用函数模板,转而按照具体化函数来生成函数定义!读者可以自己去运行一下,发现任何类型——整型,小数到结构甚至是类对象,都是可以由模板生成出堪用的交换函数的!

2023-07-03 17:55:11 214 1

原创 从C到Cpp——八、Cpp的强大函数特性(一)

(有趣的是,这并不意味着a和b这两个函数参数不可以与m和n重名,说明函数变量的独立性还是有的!如果以普通变量作为函数参数,函数在运行时事实上没有访问这些普通变量,而是创建临时变量,将普通变量的值传递给临时变量,然后对临时变量进行访问。然后,笔者尝试后,发现是可以实现的。只能说,这样的写法是不严谨的,最好别这么做,而且在现代的编译器中,这种做法无法通过编译!想不到吧,引用变量可以作为函数的返回值,返回指向某个类型某个变量的引用。,如果引用变量b是引用变量a的别名,那么对b进行的操作和对a进行的操作是等价的!

2023-07-02 20:33:14 105 1

原创 从C到Cpp——七、this指针

所有的类成员函数都包括一个隐含参数,this指针,这是一个指向这个类型的指针;虽然在函数声明和函数定义中并没有显示这个参数,但这个参数是的的确确存在的,编写函数的时候可以直接调用!注意到,this指针后使用了->运算符,因为this->name可以被理解为(*this).name,这和结构体中的定义是一模一样的!事实上,name在函数定义中是this->name的缩写,类方法是依靠this指针访问成员对象的!这一语句即是->运算符号的实例,说明 指向对象的指针->成员函数 的方式是可以被使用的。

2023-06-28 09:35:23 110 1

原创 从C到Cpp——六、构造函数和析构函数

任何被定义的类,都包含一个构造函数和析构函数。

2023-06-27 21:32:33 224 1

原创 从C到Cpp——五、定义类、类对象和类方法

主要介绍了类的定义和使用方法

2023-06-27 14:30:56 703 1

原创 从C到Cpp——四、C++的动态内存管理

本篇主要介绍了C++的动态内存管理的新方法

2023-06-24 16:33:16 78 1

原创 从C到Cpp——三、C++中的枚举

主要介绍了C++中的枚举类型,这是C语言中没有的性质

2023-06-24 10:11:46 118

原创 从C到Cpp——二、Cpp中的复合类型String

主要介绍了Cpp中的重要复合类型string,以及其的操作方法

2023-06-24 09:20:38 105 1

原创 从C到Cpp——一、输入和输出

主要介绍了C语言和C++在头文件和输入输出方式上的不同,介绍了c++的名称空间以及输入输出对象的使用方法,探讨了输入输出的一些特殊性质,有助于C语言掌握者快速了解并掌握C++的特性

2023-06-23 21:40:36 1077

原创 交大C语言程设课的题目,让我意识到了自己为什么只读了大专

把下面的代码补充完整,包括在main函数之前添加2行代码以及在最后添加一个函数的定义,使得该程序能在一行里输出三个数:输出的第一个数是x(即用户输入的第一个数)减去y(即用户输入的第二个数)的差的个位数,第二个数是x的3倍,第三个数是y的2倍。的定义,传入myfun函数的参数应该是int*类型的数据,而不是int类型的数据。这是因为,函数的传参是以传值的方式实现的,你向函数double_it中传入了a和b,不是真的让a和b被函数改变,而是让把a和b的值复制给了函数中新开辟的两个int型变量。

2023-05-06 01:12:15 446 2

原创 如何遍历一个二叉树——非递归实现

尝试用最易于理解的方式将非递归方式实现二叉树遍历的方法将清楚

2023-04-30 16:45:02 290 2

原创 关于二叉树的一系列示例代码(更新中)

关于二叉树的一系列示例代码,含有较为详尽的注释

2023-04-29 16:06:47 94

原创 推导光的多普勒效应公式·比航专ppt更符合直觉

一个非常经典的物理学公式,用机械运动和洛伦兹变换公式进行推导,非常直观,容易理解

2023-04-16 09:05:01 1790 2

原创 推导有心斥力场质点运动方程

一个物理公式的简单推导

2023-03-26 17:01:30 123

原创 指针数组和二维数组在传参时的差异

通过比较指针数组和二维数组在传参时的差异,探讨一下两种数组的一些特性。

2023-03-24 11:56:58 131

原创 桌角坠绳——一个有意思的物理情景

单纯的对一个物理情景进行的讨论,这是消遣课余时间的产物罢了,欢迎讨论。,,

2023-03-16 23:10:00 1367 2

原创 反波兰表达式的转化和计算·示例代码

按照反波兰表达式的转化和计算的方法,写出的比较规范、详细的示例代码。含有详尽的注释。

2023-02-25 09:00:50 648 1

关于电介质和磁介质的整理

,珍贵的大一资料

2023-08-19

多元函数的微分章节整理

复合函数求导的链式法则 全微分的形式不变性 高阶偏导数 复合函数的高阶偏导数 多元函数的泰勒展开定理 隐函数定理 隐函数组的求解方法

2023-04-11

用洛伦兹变换解释火车烟花问题

用洛伦兹变换解释火车烟花问题

2023-04-08

线性代数知识点和题型:换基公式

原创的一篇文章,讲述线性代数中的换基公式 这是线性空间这一章的重要公式,对于作线性变换具有重要意义

2022-12-25

线性代数重点知识点和题型:还原线性方程组

这是一个线性代数测试的重要题型的同法,掌握它比较重要!

2022-12-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除