自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cynan_Gattackon

coding is still, never ending!

  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 我的创作纪念日

一周年纪念

2022-05-26 18:46:18 223 1

原创 15.异常处理

目录1.为什么需要异常处理?2.在c++ 中异常处理的方法??3.异常的抛出4.异常的类型捕捉5.系统预定义的异常类型6.异常的再抛出1.为什么需要异常处理?用 new 运算符动态分配空间时,空间不够导致无法分配;访问数组元素时,下标越界;打开文件读取时,文件不存在。访问了野指,出现内存错误等等 …2.在c++ 中异常处理的方法??利用try (测试) throw(抛出异常) catch(处理异常)在c 语言 中异常处理的方法??​ 利用 if 语句判断操作是否正确。

2022-04-02 19:07:48 892

原创 14.数据成员属性

目录1.静态属性:2.类中的静态成员:3.类中的静态函数:4.类中的const成员5.类中的常量成员6.类中的常量函数:7.常量对象:1.静态属性:回顾C语言的静态变量特点:静态全局变量,只能在当前文件中使用修饰局部变量的时候,局部变量只能被初始化一次修改函数,只能在当前文件中使用静态变量会改变数据的生命周期 (把栈空间的数据改为数据段)2.类中的静态成员:1.类中的静态成员只能在类外初始化 int base::a=100; //类外初始化 2.类中的静态成

2022-04-02 19:00:00 850

原创 13.标准模板库(STL)

目录1.定义2. Vector 向量容器2.1.构造函数2.2.支持的运算符2.3. vector 函数接口的使用2.4.vector 迭代的定义补充: stl 库中的迭代器3.双向队列4.Lists(链表)5.Set 二叉树6. map 容器的使用 (重点)1.定义C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.2. Vecto

2022-04-02 18:01:31 2618

原创 12.模板

目录1.定义2.作用3.函数模板3.1.通用类型的定义语法3.2. 模板函数的局限性4. 模板类4.1.定义4.2.语法4.3.模板类作为函数的参数传递4.4. 模板类的成员函数类外编写1.定义模板就是做好的一个样式,用户直接去套用就可以快速实现功能。模板是不能够直接使用,必须要实例化才能用。2.作用提高代码的复用性例如:现在要求同学们编写一个 jiaohuan 交换函数,实现 (字符型,整形,浮点型,字符串类型,的数据交换) 实现上述功能函数 。开发人员就发现,这个函数的功能和参数

2022-04-02 17:16:54 698

原创 11.运算符重载

目录1.作用2.语法3.可重载运算符与不可重载运算符4. 运算符重载的两种方式5. 不同运算符重载的方式5.1.关系运算符5.2. 逻辑运算符5.3. 单目运算符5.4.输出运算符的重载5.5.输入运算符的重载1.作用给已知的运算符赋予新的功能以往所学习的运算符只能进行基本的数据类型运算符,无法实现 两个字符串的相加 , 两个类的相加,两个结构体的相加。 这时候我们就可以利用 c++ 新增的运算符重载的方法赋予运算符新的功能实现这些数据的运算。2.语法返回类型说明符 operator 运算符符号

2022-03-30 18:42:08 599

原创 10. 友元

目录1.友元2. 友元函数3. 友元类1.友元作用:用于访问类中的所有数据成员缺点:破坏类的封装性,所以不到万得已,不要随便用友元2. 友元函数语法:friend 函数的返回值类型 函数名(参数列表) 例子: friend void show() //该函数就可以访问声明他的类中的所有成员 { } 当一个函数被声明为该类的友元函数时,该函数就不属于类中的成员函数!!友元函数必须要在类内,声明!友元函数可以在类中的任意地方声明, 与成员权限无关。

2022-03-30 17:18:38 195

原创 9.虚函数、虚析构

目录1. 虚函数2. C++ 中的覆盖3. 动态多态4.虚析构5. 纯虚函数 与 抽象类1. 虚函数语法:virtual 函数返回类型 函数名(参数表) {函数体};例子:virtual void func(){ }//定义了一个虚函数,系统就会产生一个虚表。 结论:当类中含有一个虚函数时,系统就会自动分配一个虚表指针(*vptr),指向系统的虚表用户定义的所有虚函数都在该虚表中虚表的地址,永远都在对象空间的最前面重点,重点,重点!! 子类会把父类的虚表也继承

2022-03-30 16:21:25 347

原创 8.类的继承

目录1.继承的定义2.继承的作用3. 继承的语法4. 类继承成员属性的访问权限5. 利用参数列表,初始化父类的私有成员6. 继承中的构造函数与析构函数7. 总结共继承的权限问题8.类中的隐藏问题9. 类中的多继承10.类中多级继承11. 菱形继承(引入:虚继承)1.继承的定义从父类中获取一些功能接口或 数据成员,如果该成员是共有或保护成员则子类可以直接访问,提高代码的复用性。2.继承的作用提高代码的复用性有利于软件版本的升级3. 继承的语法class 类名: 继承方式 基类名(

2022-03-29 21:47:41 8082 1

原创 7.this指针

this 指针作用:用来区分类的内部 与 外部成员。每当用户创建一个类时,这个类就会自动生成一个 this 指针,指向当前类的首地址!!base(int a,int b,int c){ //this->a 当前类->a 成员 this->a=a; this->b=b; this->c=c;}//不使用 this 指针那么 a ,b ,c 变量的名字要重新修改!! ...

2022-03-29 02:20:32 290

原创 6.析构函数和构造函数

目录1.构造函数2.析构函数1.构造函数特征:函数名与类名相同函数没有返回值函数不需要用户调用,在创建对象的时候自动调用作用:用于在定义对象的时候,初始化对象中的数据成员语法:class 类名{ public: //构造函数 类名() { } }例子: class base { public: base() {

2022-03-29 02:09:26 290

原创 5、c++中的类

目录1.类的三大特性(封装,继承,多态)2.类的定义1.类的三大特性(封装,继承,多态)封装把功能函数接口封装到类里面把数据成员封装到类里面 (简单的理解,把所有代码都写入到类中)继承儿子从爸爸里面继承一些东西过来。 (子类继承父类的函数接口或数据)优点:子类直接继承父类的接口函数,不需要重新开发这些接口,提高代码的复用性,有利于软件版本的升级。多态一个对象作用于不同的事物,所得到的结果(功能)不一样!!优点: 提高代码的复用性2.类的定义class 类名

2022-03-28 17:32:01 1162

原创 4、多态与重载

目录1、c ++ 中的多态2、c++ 中的函数重载2.1、函数重载的原理2.2、 函数重载注意事项3、 函数的默认参数1、c ++ 中的多态优点:设计一个接口可以实现多种不同的功能!!静态多态: 程序在编译的时候,已经确定将要执行状态。动态多态: 程序在运行的时候,才能确定将要执行的状态。提示:c++ 中的函数重载就属于静态多态!!2、c++ 中的函数重载用相同的函数名定义不同的功能称为函数重载。重载的函数根据参数的个数和类型进行区分。不能根据返回类型进行区分!!!!2.1、

2022-03-28 16:21:29 1289

原创 3、C++中的引用

目录1、什么是引用2、定义语法3、使用场合4、常量引用4.1、作用4.2、语法4.3、引用作为函数的参数4.4、常量引用的特殊写法5、引用作为函数的返回值6、经典例子7、注意事项1、什么是引用给已知的变量去一个别名,内存不会再为该引用分配新的内存空间,节省内存空间!!!2、定义语法数据类型 &引用名 = 引用的变量名;例子:int a=100; //对变量a 取一个别名 int &q=a; // a 与 q 是完全等价的!!3、使用场合一般都是用来作为参数传递,让

2022-03-27 16:54:53 878

原创 2、动态内存分配

目录1、计算机中的内存划分2、c++中用 new 分配堆空间 delete 释放2.1、分配一块堆空间2.2、分配多块堆空间4、new 与 malloc 的区别1、计算机中的内存划分2、c++中用 new 分配堆空间 delete 释放2.1、分配一块堆空间数据类型 *变量名 = new 数据类型; // -> 分配一块内存空间 例子:分配一块int 类型的堆空间 int *p = new int;//一条龙服务!!自己计算 空间的大小,自己进行 类型的转换!! int *q =

2022-03-25 14:57:00 660

原创 1.命名空间与匿名空间

目录作用定义语法命名空间的成员使用命名空间的嵌套作用解决开发过程中变量名冲突的问题定义语法用户声明的名字空间定义以关键字 namespace 开头,后面是 名字空间的名字。空间名:与变量的命名规则相同,只能由数字、字母、下划线组成,数字不能开头。注意:在没有被其它文件包含的情况下,命名空间中的成员只能在本文件中使用,即使其它文件也定义了相同名字的命名空间。但如果其它文件包含了本文件,则本文件中的命名空间中的成员可以在其它文件以 “命名空间::成员变量” 的格式被使用。//定义 name

2022-03-25 01:16:43 998

原创 leetcode day3

思路直观来说我们只需维护两个链表 small 和 large 即可,small 链表按顺序存储所有小于 x 的节点,large 链表按顺序存储所有大于等于 x 的节点。遍历完原链表后,我们只要将 small 链表尾节点指向 large 链表的头节点即能完成对链表的分隔。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * };.

2022-03-22 01:26:30 81

原创 leetcode day2

49题思路采用哈希算法,在将字符串进行字母排序时,将其放入到对应的 bucket 中,如果排序后是一模一样,则会处于同一个 bucket 中,最后将 bucket 中的字符串成堆取出即可。时间复杂度为 O(n)。哈希,又名散列,英文名称 Hash。简单来说,哈希算法是在遍历数据的过程中,逐一给数据做标记,遍历完之后,如果想要寻找某个数据,只需根据标记即可快速找到。代码class Solution {public: vector<vector<string>> g

2022-03-16 23:45:15 175

原创 leetcode day1

解答如下:class Solution {public: int lengthOfLongestSubstring(string s) { int maxtrim = 0; int left = 0; int size = s.length(); unordered_set<char> win; if(size == 0) return 0; for(int i = 0; i < .

2022-03-13 22:06:38 792

原创 VSCode与Keil联合开发STM32

目录1.为什么要联合开发2.配置VSCode的环境1.安装c/c++2.安装Embedded IDE3.设置编译工具4.导入 STM32 工程5.配置编译器选项6.烧录工具选择1.为什么要联合开发Keil容易出现中文乱码,虽然尝试过通用的修改字符串格式,但是没有什么卵用,而VSCode可以解决乱码问题,如下图(第一张是Keil,第二张是VSCode)更喜欢VSCode的UI设计,由上图可见VSCode可以进行局部编译,全局编译,烧录,但是无法进行调试,所以调试部分得在 Keil 上进

2022-03-02 18:33:19 7394 4

原创 Linux03

目录1.新手必读的Linux使用注意事项2.Linux命令的执行过程是怎么样的3. PATH 环境变量的作用及修改1.新手必读的Linux使用注意事项Linux严格区分大小写。其中就包括文件名、目录名、命令、命令选项、配置文件设置选项等。Linux不靠扩展名区分文件类型。Linux系统通过权限位标识来确定文件类型,常见的文件类型只有普通文件、目录、链接文件、块设备文件等几种。Linux中的一些特殊文件还是要求写”扩展名“的,但写这些扩展名只是为了帮助管理员来区分不同的文件类型。比如常见压缩文件名有

2022-02-17 21:56:35 369

原创 Linux02

虚拟机配置Ubuntu的注意事项虚拟硬盘的空间可以根据需要调整大小,不用担心其占用的空间,因为实际占用的空间还是以安装的系统大小而非此划分的硬盘大小为依据。比如你设定了硬盘容量为20GB,但是安装Linux只用了4GB,那么实际占用的空间会随着虚拟机系统使用的空间增加而增加。为了让虚拟机中的系统运行速度快一点,我们可以选择“内存”调整虚拟机内存大小,但是建议虚拟机内存不要超过宿主机内存的一半。选择“网络适配器“将进入VMware新手设置中最难理解的部分——设置网络类型。这里简单介绍两种常用网络类

2022-02-16 13:59:21 325

原创 Linux01

目录1.Linux 和 UNIX 的关系/区别2.C语言和Shell语言的区别3.Linux 相比 Windows,有什么优缺点?1.优点2.缺点1.Linux 和 UNIX 的关系/区别Linux 是一个类似 Unix 的操作系统,Unix 要早于 Linux,Linux 的初衷就是要替代 UNIX,并在功能和用户体验上进行优化,所以 Linux 模仿了 UNIX(但并没有抄袭 UNIX 的源码),使得 Linux 在外观和交互上与 UNIX 非常类似。Linux开源免费,UNIX用于商业(收费

2022-02-13 23:07:57 210

原创 Shell脚本编程

目录Shell脚本是什么?Shell脚本有什么用?Shell命令的本质创建一个外部命令Shell脚本语言和C语言一样吗?编写shell脚本Shell启动方式Shell脚本语法1、定义变量2、使用变量3、将命令结果赋值给变量4、删除变量5、特殊变量6、字符串拼接7、读取从键盘输入的数据8、退出当前进程9、对整数进行数学运算10、逻辑与/或11、检测某个条件是否成立12、管道13、if 语句14、if else 语句15、if elif else 语句16、case in 语句 (类似C中的 switch)1

2021-11-17 22:25:15 466

原创 vi/vim编辑器

为什么要用vim/vi编辑器?vi/vim编辑器可通过终端进行操作,相比界面操作(gedit编辑器)应用范围广很多;vi/vim 占用的内存小,在一些内存表较小的linux系统中只支持 vi/vim 编辑器;vi/vim 编辑效率高vi/vim的三种模式一般模式(默认模式)插入模式(编辑模式)命令行模式...

2021-11-17 14:51:41 202

原创 常用Linux命令

@TOC(目录)Shellshell是一个应用程序,作为用户与内核信息传递的桥梁。常用Shell命令1.目录操作类man用于查找命令或函数的使用偏向用于查找使用方法pwd打印当前目录的路径显示当前目录ls -a 显示所有目录rmdir用于删除空目录mv1.可重命名文件夹、文件的名字2.可移动文件到其它位置2.文本操作类touch创建新文件cat打印文件的内容echo1.控制端终端显示输入的内容2.重定位输入的内容 (>和>>有区别

2021-11-15 21:42:05 3461 2

原创 Linux用户管理、文件属性

目录1.ARM体系架构几个概念解析2.Linux根目录下的子文件夹3.文件类型4.用户管理两个重要名称三个重要文件5.文件权限1.ARM体系架构几个概念解析指令集是指 CPU 硬件于软件之间的接口描述。RISC:精简指令集 ,包括 ARM/MIPS/RISC-VCISC:复杂指令集 ,包括 8051/x86架构: 主要指某一个处理器所使用的具体指令集处理器/内核:指令集的实物化,像 Cortex-M3芯片:多指 SOC,由内核 + 其它模块组成2.Linux根目录下的子文

2021-11-14 18:27:14 1000

原创 ADC模数转化器

目录简介采样量化和编码参数1、转换精度:2、转换速度:STM32F407上的ADC简介ADC:数模转换器,即将模拟量转化为数字量要想实现ADC,需要进行三个重要的步骤:采样 、 量化、 编码。采样《数字电子技术基础》第五版的第525页有说明采样定理量化和编码参数1、转换精度:用的单片机是STM32F407系列,可配置的ADC转换精度为12位、10位、8位、6位。这里我们假设为12位,则可以将电压划分为 4096份(2^12 = 4096) ;由于VDD为 3.3V(3300mV

2021-10-27 00:20:34 540

原创 两个栈实现队列

题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size,

2021-10-13 17:35:16 117

原创 2021-10-12

数组和链表的区别链表申请的内存不连续,数组申请的内存连续;由于链表节点不仅包含数据,还包含指针,所以链表占用的内存空间比数组大;由于数组可以通过下标访问元素,所以数组有序数据的查找速度较快;链表的插入速度比数组快,因为数组每插入一个新元素,插入元素后面的其它元素需要依次往后移一个位置。如何理解Linux下的线程和进程?两者有什么区别?进程是系统进行资源分配和调度的一个独立单位。线程是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位;区别:进程有独立的地址空间,一个进

2021-10-13 01:21:25 92

原创 2021-10-10

超声波模块用的是什么型号,如何接收超声波模块传过来的数据?超声波模块采用的型号是 HC-SR04。步骤:首先stm32先向超声波模块发送启动信号(至少10us的高电平),超声波模块收到启动信号后会发送回8个40kgz的脉冲;之后,当超声波碰到障碍物后会反弹,超声波模块接收到返回的超声波(即接收到信号)后会发送高电平,stm32根据高电平的持续时间算出超声波经过的路径,将该距离除以2后就得到了障碍物的距离。测量高电平的持续时间采用的是定时器延时。该超声波模块的距离测量误差为 3mm,也就是测量精度

2021-10-11 00:29:11 487

原创 2021-10-09

答案:A不加 {},实际行 else匹配的是第二个 if(就近原则)答案:AA中头文件可以单独编译,但是生成的可执行文件不能运行C中要分情况讨论,如果.c文件中有调用到其它.c文件的API接口,则无法单独编译;如果没有调用到,则可以单独编译,且与其它.c文件无关...

2021-10-10 01:34:42 70

原创 散列表(哈希表)

定义散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字 key 对应一个存储位置 f(key)。对应关系f称为散列函数,又称为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中这块连续存储空间称为散列表或哈希表(Hash table),关键字对应的记录存储位置我们称为散列地址。散列技术的记录之间不存在什么逻辑关系,它只与关键字有关联。两个关键字 key1 != key2,但是却有 f(key1) = f(key2),这种现象我们称为冲突,并把 key1

2021-10-09 17:29:23 80

原创 初识线性表

线性表(List):零个或多个数据元素的有限序列。注意:首先它是一个序列。也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个无后继,其它每个元素都有且仅有一个前驱和后继;然后,线性表强调是有限的;线性表中的数据都是相同类型的。...

2021-10-09 15:16:58 58

原创 2021-10-09

答案:A中断处理过程分为两个阶段:中断响应过程和中断服务过程。中断响应时间是中断响应过程所用的时间,即从发出中断请求到进入中断处理所用的时间。8k代表存储矩阵中有81024(内存按字节编址)个交点(每个交点我们称为一个存储单元),后边的4代表每个存储单元只能存储4个二进制(4bit),总共可以存储的比特位为 81024*4 bit答案:B一个存储器的性能通常用速度、容量、价格三个主要指标来衡量。计算机对存储器的要求是容量大、速度快、成本低,需要尽可能地同时兼顾这三方面的要求。但是一般来讲.

2021-10-09 15:12:44 61

原创 2021-10-08

uart通信如何接收数据?有没有遇到通信过程中有些比特位丢失的情况?根据原理图找到复用功能位uart接收的引脚,将该引脚复用为uart功能引脚,之后编写uart的接收中断服务函数没有出现过数据位丢失的情况,因为开发板上没有硬件FIFO,所以串口每接收到一个字节就触发一次uart中断,在中断服务函数中对该字节进行处理,而不会出现过多字节存储在硬件FIFO中使之溢出导致字节丢失的情况。知识点:串口丢数据一般有两种情况(排除发送端发送的数据不对),第一种是信道也就是串口线或者连接口不行,无法承受很高

2021-10-09 00:14:57 113

原创 位域(位字段)

位域(位字段)有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。请看下面的例子:struct bs{ unsigned m; unsigned n: 4; unsigned char ch: 6;};:后面的数字用来限定成员变量占用

2021-10-08 15:12:48 633

原创 2021-10-07

答案:B动态库的函数到实际要使用的时候才加载到内存,所以运行速度较慢(一个早就准备好了,一个是要用的时候才加载,当然是准备好的更快)答案:A由于a、b都是非负整数,所以a-b得到的结果不会是负数,由于a比b小,所以a-b得到的数比0大;a-b的值是已经是非负整数,所以将它整型化后依然是非负整数答案:Aprintf("%d", M(a,b)+1) 中等价于 printf("%d", (15<<4+1)+1),不用考虑a,b的类型,对于64位系统而言,int型占32位,所以移位不会.

2021-10-08 12:00:00 66

原创 实现链表翻转

双指针迭代我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。第二个指针 cur 指向 head,然后不断遍历 cur。每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。演示图如下:代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val;

2021-10-07 17:04:21 60

原创 2021-10-07

2021-10-07 16:01:35 77

MyCamera.7z

MyCamera.7z

2021-10-03

空空如也

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

TA关注的人

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