自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 WireShark对tcp通信数据的抓包

这样,原本的第二次挥手(ACK)和第三次挥手(FIN)就合并在了一个TCP报文中,因此抓包工具只会抓取到这个合并后的FIN+ACK报文以及后续的客户端ACK报文,总共是三个包。此时就可以进行数据传输了。[Protocols in frame: eth:ethertype:ip:tcp:data](帧内封装层次协议结构,eth:ethertype:ip:tcp,以太网,以太网协议,ip,tcp)Destination: 00:00:00_00:00:00 (00:00:00:00:00:00)(目标地址)

2024-05-06 13:18:24 1679 1

原创 luci框架相关笔记

luci架构LuCI 架构采用了MVC(Model-View-Controller)设计模式,各个目录的作用如下:model(模型): 位于 /usr/lib/lua/luci/model 下,存放了与系统配置相关的模型脚本。这些脚本负责与底层系统的交互,如读取、验证和更新配置文件。模型层封装了对系统资源的访问和业务逻辑处理。 view(视图): 位于 /usr/lib/lua/luci/view 下,包含了各类HTML模板文件,它们使用Lua脚本来动态生成页面内容。视图层负责将模型中的数据以合适

2024-05-06 12:58:20 1163

原创 网络相关笔记

比如r1向r2r4r5发送路由表,表的内容为r1到r2r4r5的距离,当r2收到r1的路由表后,发现r1到r5的距离为1,如果r2通过r1去往r5,那么总距离就是 到r1的直连距离1+r1到r5的距离1=2,而现在r2表中并没有r5的信息,于是新增一条r5的记录(目标节点r5,下一跳r1,距离2),接着查看r1表的其他内容,r2就是他自己,不更新,r4比原来远,也不更新。在IPv4中,子网掩码通过“1”和“0”的组合来标识IP地址中的网络部分,“1”对应的部分为网络位,“0”对应的部分为主机位。

2024-05-06 12:31:28 1322

原创 自旋锁和读写锁

​何谓自旋锁?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,“自旋”一词就是因此而得名。

2023-10-21 14:59:56 180

原创 float、double类型的转化和判断为零问题

double精度误差在1e-15,所以要判断一个单精度浮点数:则是if( abs(f) <= 1e-6);若小于,为0,大于,不为0。一般float型只能精确到小数到后六位即1e-6,将float型的数a的绝对值abs(a)与1e-6比较,如果abs(a)比1e-6还要小的话就可以认为a的值为零,因为小数六位以后是不精确的,是没有意义的。float是32位,double是64位。float32位中,有1位符号位,8位指数位,23位尾数位。double64位中,1位符号位,11位指数位,52位尾数位。

2023-10-21 09:08:19 834

原创 QT信号槽

在类中public slots:下声明槽函数b->setText("点击发送信号");//注册信号与槽的连接//槽函数可以是普通的成员函数 还可以是槽函数//如果信号没有参数 槽函数也不能有参数 如果信号有参数 槽函数可以有也可以没有参数qDebug()

2023-09-29 15:18:52 409

原创 QT窗口的设置、按钮的创建和对象树的概念

可以看到 在窗口被关闭时 按钮的析构函数被调用。

2023-09-29 09:11:37 498

原创 QT的安装和注册

百度搜索qt官网或者点链接直接跳转Index of /new_archive/qthttps://download.qt.io/new_archive/qt/尽量下载5.6版本以上的根据系统选择下载进入qt官网 点击注册在安装界面输入注册的账号然后一直点击下一步 选择需要的组件完成安装

2023-09-27 19:41:12 1100

原创 STL算术生成和集合算法

/ beg1容器1开始选代器//end1容器1结束选代器//beg2容器2开始选代器//end2容器2结束选代器// dest目标容器开始迭代器。//beg1容器1开始选代器//end1容器1结束选代器。//求两个集合的并集// 注意:两个集合必须是有序序列。// beg开始选代器//end 结束选代器。// dest目标容器开始选代器。// beg2容器2开始选代器。//dest目标容器开始选代器。// beg2容器2开始选代器。//end2容器2结束选代器。//end2容器2结束选代器。

2023-09-26 19:07:17 388

原创 STL排序、拷贝和替换算法

/ 容器元素合并,并存储到另一容器中。// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置。// 按条件替换元素,满足条件的替换成指定元素。// dest目标容器开始迭代器。// beg1容器1开始迭代器。//end1 容器1结束选代器。// end2容器2结束迭代器。// oldvalue 旧元素。//beg2容器2开始选代器。//dest目标起始选代器。// 反转指定范围的元素。// 互换两个客器的元素。// beg开始选代器。// beg开始选代器。// beg开始选代器。

2023-09-26 16:54:12 261

原创 STL常用遍历、查找算法

算法主要是由头文件<algorithm><functional> <numeric>组成<algorithm>是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数<functiona>定义了一些模板类用以声明函数对象。

2023-09-26 09:15:21 131

原创 内建函数对象

template<class T> T multiplies<T>//乘法仿函数。emplate<class T> T divides<T>//除法仿函数t。template<class T> T modulus<T>//取模仿函数。template<class T> T negate<T>//取反仿函数。template<class T> T minus<T>//减法仿函数。template<class T> T plus<T>//加法仿函数。其中negate是一元运算,其他都是二元运算。

2023-09-24 19:29:53 60

原创 STL函数对象和谓词

函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值。函数对象使用重载的()时,行为类似函数调用,也叫仿函数。函数对象超出普通函数的概念,函数对象可以有自己的状态。如果operator(接受一个参数,那么叫做一元谓词。如果operator(接受两个参数,那么叫做二元谓词。重载函数调用操作符的类,其对象常称为函数对象。函数对象(仿函数)是一个类,不是一个函数。函数对象可以作为参数传递。返回bool类型的仿函数称为谓词。

2023-09-24 16:44:16 70

原创 stl案例二——员工分组

公司今天招聘了10个员工,10名员工进入公司之后,需要指派员工在那个部门工作员工信息有:姓名 工资组成;部门分为:策划、美术、研发随机给10名员工分配部门和工资通过multimap进行信息的插入 key(部门编号)value(员工)分部门显示员工信息。

2023-09-24 15:24:13 87

原创 set/multiset容器、map容器

对于自定义类型,set必须指定排序规则才能插入元素public:int age;public://年龄降序person p1("张三",20);person p2("李四",28);person p3("王五",17);it!=s.end();it++)cout <<"姓名: " << it->name<< "年龄: "<<it->age;return 0;

2023-09-24 14:40:37 69

原创 list容器排序案例

案例描述:将Perspn自定义数据类型进行排序,Person中属性有姓名、年龄、身高。排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序。

2023-09-23 18:05:10 113

原创 stack栈、queue队列、list链表容器

栈的数据结构特性是:先入后出,后入先出,只能从栈顶插入、删除和访问。可将栈视为一叠盘子,最后叠上去的盘子首先被取下来,而不能从中间或底部取出盘子。队列的数据结构特性是:先进先出,允许在开头删除,在末尾插入,类似排队系统。队列容器允许从一端新增元素,从另一端移除元素队列中只有对头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为入队,出数据称为出队list是双向链表的一个泛化容器,它的数据元素可通过链表指针串接成逻辑意义上的线性表。

2023-09-23 17:33:00 175

原创 c++STL案列一评委打分

有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。

2023-09-23 13:01:03 120

原创 c++STL概述

for(;it_s!= it_e;it_s++)//对容器取* 得到的是<>里的类型。

2023-09-23 13:00:49 280

原创 c++异常

所谓错误是指在程序运行的过程中发生的一些异常事件(如:除 0 溢出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等)中可以抛出任何类型的异常,所以我们的异常类可以不继承自标准异常,但是这样可能会导致程序混乱,尤其是当我们多人协同开发时。//2.这个例子,异常没有捕获的结果就是运行结果错的一塌糊涂,结果未知,未知的结果程序没有必要执行下去。//1.异常应该捕获,如果你捕获,可以,那么异常必须继续抛给上层函数,你不处理,不代表你的上层不处理。在自己的异常类中,可以添加自己的信息。" << endl;

2023-09-20 16:00:33 66

原创 c++类型转换

类型转换(cast)是将一种数据类型转换成另一种数据类型。例如,如果将一个整型值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型。转换是非常有用的,但是它也会带来一些问题,比如在转换指针时,我们很可能将其转换成一个比它更大的类型, 这可能会破坏其他的数据。应该小心类型转换,因为转换也就相当于对编译器说:忘记类型检查,把它看做其他的类型。一般情况下,尽量少的去使用类型转换,除非用来解决非常特殊的问题。标准c++提供了一个显示的转换的语法,来替代旧的C风格的类型转换。使用C。

2023-09-20 09:56:27 48

原创 c++模板

c++提供了函数模板所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体 制定,用一个虚拟的类型来代表。这个通用函数就成为函数模板。凡是函数体相同的函数都可以用这个模板代替, 不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型, 从而实现不同函数的功能。c++提供两种模板机制函数模板和类模板类属类型参数化,又称参数模板总结:模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。

2023-09-19 08:55:42 111

原创 c++多态

接口类只是一个功能声明,并不是功能实现,子类需要根据功能说 明定义功能实现。如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态(绝大数面向对象语言都不支持多继承,但是绝大数面向对象对象语言都支持接口的概念,抽象类:一个类如果有纯虚函数,那么这个类就是一个抽象类,抽象类不能实例化对象。子类和父类有同名的变量和函数,父类中同名的变量和函数会被隐藏。继承抽象类的子类也是一个抽象类,如果子类重写了虚函数,那么子类就不是抽象类。中没有接口的概念, 但是可以通过纯虚函数实现接口。

2023-09-17 10:26:39 356 2

原创 c++继承

派生类继承基类,派生类拥有基类中全部成员变量和成员方法(除了构造和析构之外的成员方法),但是在派生 类中,继承的成员并不一定能直接访问,不同的继承方式会导致不同的访问权限。工程开发中真正意义上的多继承是几乎不被使用,因为多重继承带来的代码复杂性远多于其带来的便利,多重继 承对代码维护性上的影响是灾难性的,在设计方法上,任何多继承都可以用单继承代替。最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类 的成员,还拥有新定义的成员。Derived 派生于。

2023-09-16 09:27:41 274

原创 c++运算符重载

这样的限制有意义,否则,所有这些行为产生的运算符只会混淆而不是澄清寓语意。a++是先把a赋值到一个临时空间,再对a+1赋值给临时变量,等运算结束后才返回临时变量给a (参与运算的是自加之前的值)++a是先给a+1,直接对a赋值,不需要开辟临时空间(参与运算的是返回值的引用)定义重载的运算符就像定义函数,只是该函数的名字是 operator@,这里的@中所有的运算符都可以重载,但运算符重载的使用时相当受限制的。代表了被重载的运算符。将左移运算符的重载函数声明为类的友元函数 就可以访问类的成员。

2023-09-14 09:21:41 467

原创 c++友元函数

friend关键字只出现在声明处,其他类、类成员函数、全局函数都可声明为友元,友元函数不是类的成员,不带 this 指针。的,所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去,但是呢,你也可以允许你的闺蜜好基友进去。比如你的家,有客厅,有你的卧室,那么你的客厅是 Public。但是,有时候需要在类的外部访问类的私有成员,怎么办?类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(解决方法是使用友元函数,友元函数是一种特权函数,c++.友元关系是单向的,类。全局函数成为类的友元。

2023-09-13 14:03:19 43

原创 c++的this指针

在c++中同一个类的不同对象,在内存中有不同的储存空间,但是成员函数在内存中只保存了一份,在调用函数处理成员数据时,this指针能保证该成员函数处理的是自己的成员数据。//p1的地址传给this指针 age赋值给了this指向的age name赋值给了this指向的name。这个const修饰的是指针 const type* const this 代表不能通过this指针去修改this指针指向对象的内容。类的成员函数默认编译器都加上了一个this指针,这个this指针指向调用该成员函数的对象。

2023-09-12 20:17:31 111 1

原创 c++成员变量和函数的储存

在c++中“数据”和“处理数据的操作(函数)”是分开存储的。类对象成员—静态成员变量不占用对象空间大小。类对象成员—普通成员函数不占用对象空间大小。类对象成员—静态成员函数不占用对象空间大小。类对象成员—普通成员变量占用对象空间大小。

2023-09-11 20:21:56 116

原创 c++静态成员

不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。4.将静态的成员指针变量私有化提供获得唯一对象的地址接口。在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字。普通成员函数可访问静态成员变量、也可以访问非经常成员变量。静态成员函数只能访问静态变量,不能访问普通成员变量。const修饰的静态成员变量可以通过类的定义域访问。静态成员函数可以访问const修饰的静态成员变量。const修饰的静态成员变量可以通过对象访问。静态成员变量可以通过类的对象访问。

2023-09-09 16:20:11 155

原创 c++动态对象

在c++中 释放对象时 系统会自动调用析构函数 但在以下代码编译运行后 析构和构造均未调用 所以在c++中不能用malloc和free动态申请空间 而是用new和delete。//注意 new对象的数组时 不能调用有参构造 只能调用无参构造。操作,这将可能成为一个程序错误,除非指针指向的内容是非常简单的,因为它将不执行析构函数.new一个单一的对象时 delete释放单一的对象。new一个数组时 delete释放 [] 这个数组。//new时调用有参构造。类型 * p = new 类型[n];

2023-09-09 09:34:14 151

原创 explicit 关键字

或者除了第一个参数外其余参数都有默认值的多参构造。,禁止通过构造函数进行的隐式转换。的构造函数不能在隐式转换中使用。是针对单参数的构造函数。

2023-09-08 19:45:07 125

原创 对象的构造和析构

浅拷贝:同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然是独立的两个对象,这种情况 被称为浅拷贝. 一般情况下,浅拷贝没有任何副作用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动 态内存释放的处理,会导致内存问题。的使用完一个变量,没有及时清理,也会造成一定的安全问题。c++为了给我们提供这种问题的解决方案,构造函数和析构函数,这两个函数将会被编译器自动调用,完成对象初始化和对象清理工作。类中有多个对象时,构造的顺序是先构造里面的对象,再构造外面的对象。

2023-09-08 19:18:31 113

原创 类和对象的基本概念

从这个案例我们应该可以体会到,属性和行为应该放在一起,一起表示一个具有属性和行为的对象。现实世界的事物所具有的共性就是每个事物都具有自身的属性,一些自身具有的行为,所以如果我。c++中结构体是可以存放函数的,也就是数据(属性)和行为是封装在一起的。类和结构体的区别在于 类对成员可以进行访问的权限控制,结构体不可以。语言中,行为和属性是分开的,那么万一调用错误,将会导致问题发生。保护的和私有的区别是 保护的子类可以访问 私有的子类不可访问。对变量的设置时的控制。类中的函数 可以直接访问类中的成员。

2023-09-08 08:41:32 81

原创 c++的extern “C“

extern"C"是用于在c++中声明c函数的关键字。在c++中函数的名称会根据函数的参数类型和返回类型进行重载,而c函数的名称是通过链接器进行链接的。如果想要在c++中调用一个c函数,就需要使用 extern"C"来告诉编译器以c的方式链接函数。当在c++中使用 extern"C"修饰一个函数时,编译器会对函数名进行特殊处理,以确保函数名在链接过程中保持与c语言兼容。这意味着c++编译器不会对函数名进行重载或修饰,而是按照c的命名约定来生成函数名。

2023-08-29 10:19:54 187

原创 c++函数重载

我们现实生活中经常会碰到一些字在不同的场景下具有不同的意思,比如汉语中的多音字“重”。当我们说:“他好重啊,我都背不动”我们根据上下文意思,知道“重”在此时此地表示重量的意思。如果我们说“你怎么写了那么多重复的代码?维护性太差了!”这个地方我们知道,“重”表示重复的意思。同样一个字在不同的场景下具有不同的含义。那么在c++中也有一种类似的现象出现,同一个函数名在不同场景下可以具有不同的含义。在传统c语言中,函数名必须是唯一的,程序中不允许出现同名的函数。

2023-08-29 09:43:21 35

原创 c++默认参数和占位参数

c++中形参可以设置默认参数,设置时需要注意以下几点:如果有一个参数设置了默认参数,从这个参数往后的每一个参数都要设置默认参数函数的声明和定义出设置默认参数只能一处有实参传入则使用实参,实参没有传入使用默认参数。

2023-08-27 22:17:43 49

原创 c++内联函数

在c中我们经常把一些短并且执行频繁的计算写成宏了而不是函数,这样做的理由是为了执行效率,宏可以避免函数调用的开销,这些都由预处理来完成。但是在c++出现之后,使用预处理宏会出现两个问题:第一个在c中也会出现,宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误。第二个问题是c++特有的,预处理器不允许访问类的成员,也就是说预处理器宏不能用作类类的成员函数。为了保持预处理宏的效率又增加安全性,而且还能像一般成员函数那样可以在类里访问自如,c++引入了内联函数(inline function)

2023-08-25 17:15:27 45

原创 c++中的引用

一、引用的概念引用(reference)就是C++对C语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。原类型名&别名 = 旧名int a = 10;//b就是a的别名 b和a有相同的地址b = 100;//引用一旦初始化之后不能改变引用的指向代码示例&在等号左边是起标识作用 在右边是求地址运算引用定义时必须初始化不能引用NULL函数传参中的引用:代码示例不能返回局部变量的引用 可以返回静态变量(static)的引用 静态变量不会被释放。

2023-08-24 10:56:00 39

原创 c++对c的扩展

一、冒号作用域::是一个作用域 如果::前面什么都没有加代表全局作用域。

2023-08-16 22:23:38 76

原创 基于stm32的智能小车

语音模块硬件接线 A25 -- PA15 (跟随) A26 -- PA13 (避障) A27 -- PA14 (循迹)电机接线:B-1A -- PB0 B-1B -- PB1 A-1A -- PB2 A-1B -- PB10。语音模块控制:多种语音改变多种引脚的电平,通过语音控制实现以上多种功能的切换。跟随功能:通过超声波测出小车和跟随物的距离决定移动方向。硬件接线 SCL -- PB6 SDA -- PB7。-- PB3 循迹模块(右) -- PB4。-- PB5 跟随模块(右) -- PB6。

2023-07-05 21:50:33 11800 12

空空如也

空空如也

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

TA关注的人

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