- 博客(61)
- 收藏
- 关注
原创 CPP杂项
1. 友元函数声明顺序非成员函数:需在类外提前声明函数,再在类内标记为友元。cpp复制// 前向声明// 正确:函数已声明void helper() { ... } // 实现直接定义在类内:无需提前声明,但视为隐式内联。cpp复制friend void helper() { ... } // 直接定义(隐式内联)易错点若未提前声明,友元函数可能被误认为新函数(导致链接错误)。2. 友元类声明顺序被友元的类(如B)需至少前向声明,再在目标类(如A)中标记为友元。
2025-04-08 22:19:03
627
原创 文件与fd
1.对于linux,什么是文件:文件=内容+属性(属性也会被记录,如:空文件夹有大小)2.文件什么时候被打开是什么被打开:被进程打开,运行到fopen成功就被打开,访问文件本质是进程访问3.为什么访问文件要先fopen打开它:cpu要跑进程,可是文件在磁盘上 -> 打开文件就是将文件加载到磁盘(冯诺依曼)4.加载什么文件的内容和属性===>操作系统要管理文件的,如何管理文件?先描述在组织(文件在内存的存在方式:数据结构+内容)
2025-03-26 22:02:16
852
原创 虚拟地址空间(下)进程地址空间(上)
作用:如1.让代码区变成只读的 2.写时拷贝的实现:子进程创建时其页表指向的父进程代码和数据权限都是只读的,子进程试图修改,触发错误,系统开始写时拷贝。来源:1.可执行程序本身已经包含了区域权限信息,代码区不可写等。
2025-03-19 20:37:17
980
原创 Linux:进程调度切换_命令行参数(上)
1.释放代码和数据2.将退出信息(任务完成情况)保存在task_struct内(int code.....)3.task_struct被维护,给父进程管理进程创建时,先创建数据结构,再加载代码和数据,退出顺序是反的如果进程退出前父进程已经没了,会给操作系统进程管理(systemd)子进程退出,父进程不接收他的退出信息,子进程处于僵尸状态,造成内存泄漏(Z状态一直不退出,PCB一直不释放(必须给父进程退出信息))
2025-03-16 12:50:07
367
原创 进程状态优先级
进程死亡,先移除代码数据,再给父进程返回值(父进程被杀了就给操作系统,即孤儿进程)。内存资源严重不足,将进程的代码数据放到磁盘(PCB不放)(阻塞挂起状态的进程),阻塞状态的进程等待的外设有信息了,阻塞先改运行,将代码数据调回内存。R+前台运行,R后台运行(S+,S...)kill -19 ..暂停切后台改T状态,kill -18 后台继续跑。并发:(单CPU)给每个进程分配时间片,通过轮换机制,一段时间内,每个任务都做一遍。PCB在系统运行队列,执行时从头部拿下,给CPU执行,时间片到了再拿下尾插。
2025-03-12 09:45:10
149
原创 linux进程属性
进程的所有信息记录在/proc/ 文件夹内的进程pid对应文件内(都在内存中,不在磁盘),有的是文件夹,有的是文件。(实时更新的,进程都有)(关联ps命令(做/proc/的文本分析))
2025-03-12 09:03:16
520
原创 牛客 KY264 单词识别
输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,次数一样的按照单词小写的字典序排序输出,要求能识别英文单词和句号。
2024-10-08 19:43:15
240
原创 简单的找交集差集算法
思路:两个位置指向两个容器,小的++,相等同时++,相等就是交集,小的和一个遍历完另一个剩下的就是差集。运算符来比较是否到达了集合的末尾。来比较迭代器,因为迭代器不支持。时间复杂度:O(n)
2024-10-03 20:13:07
427
1
原创 map部分重点
给key,返回value的引用,如果没有key,就插入一个key,无参构造的value的pair<>插入就直接返回迭代器了,而不是pair<iterator,bool>insert返回pair<iterator,bool>,[]返回值。erase键的返回删除成功次数(为了和mutimap同一)插入insert会插入相同键的,即插入一定成功。[]不再提供重载,有多个value。适用:没有就插入,有就拿找到的值。find返回中序第一个。
2024-10-03 19:52:42
269
原创 string map练习
string的花括号隐式类型转换不能字母个数+字母,会被认为是初始化列表,而不是个数加字母的隐式类型转换。顺序式容器都允许填充:n个模板的(vector,string为char) value。用临时变量string(1,'a')解决而不是{1,'a'}优先认为是初始化列表。to_string 在<string>头文件的std命名空间中。所定义的类型名字的作用域和访问级别取决于它被定义的位置。2.类的非静态成员函数可以被声明为虚函数。用于为已存在的类型创建一个新的名字。要格式化写浮点型入字符串用。
2024-09-23 18:21:11
263
原创 初识set,map
已知快速查找:1.暴力查找2.排序+二分查找(插入删除麻烦)3.搜索树->二叉搜索树(极端情况n)->平衡树(AVL树,红黑树)(logn高度太高,搜索次数多)->多叉平衡搜索树(B树系列)4.哈希系列序列式容器和关联式容器set->底层红黑树。
2024-09-22 00:11:35
326
原创 while(cin>>a)
重载的原为(bool)istream,返回值为bool,重载的为括号,但是仿函数占了()的重载,就省略成这个样子,看起来像是重载了一个内置类型。即要转换的类型+括号.输入流内部failbit/badbit标志设置true,operator bool返回了false,结束。while(cin>>a)要结束输入CTRL+Z+换行。但返回值类型时istream,
2024-09-21 16:13:17
268
原创 虚表生成时机与多态开始时机
生成父类虚表,再执行子类的构造,这时虚表已经重写,可以多态(即开始派生类构造代码)。虚表生成在父类构造完之后,子类构造完之前。运行结果:0,1,2。
2024-09-12 15:12:48
183
原创 虚函数派生类与基类访问权限不同
所以在基类的虚函数访问权限决定了编译器在编译 pf->func(),这样指令时给不给你访问,它只能检测是你基类的指针/引用调用了虚函数,不知道指针/引用的基类还是子类,更不知道虚函数表里的有没有重写更改地址。在运行时编译器无权设置访问权限。访问权限的作用仅在程序编译期(由编译器控制),一旦超出编译期进入执行期(程序脱离编译器控制),访问权限则消失的无影无踪(即在真实内存中没有任何访问权限设置痕迹)。实现多态时,虚函数能不能访问看基类是不是public访问权限,与派生类的虚函数访问权限无关。
2024-09-12 15:02:02
224
原创 二叉搜索树
2.要删除节点含2个子节点,删除这个节点并保持大致结构不变思路是:找到比此节点左子树大,右子树小的节点,即左子树的最右(最大),右子树的最左(最小)节点。记录并保持其父节点关键是一开始就将父节点变量设为此节点的父,没有设nullptr,然后在每次此节点变化代码前父节点获取此节点的值。构成:同链表,先创建子节点的模板类,记录值和左右子节点,再创建二叉搜索树,包含根节点,至少提供增加和删除和中序遍历。增加:因为其有序,直接循环遍历,比值大走有,小走左,遍历到空节点插入,额外提前检查是不是空树。
2024-09-09 14:31:40
279
原创 C++继承初识
1.继承本质是复用相同的代码(属性)2.格式:class 类名:继承方式 父类3.继承方式的规律:父类的:对于私有成员,不管哪种继承方式都不可见--->不想被子类继承的成员对于保护-->能子类内部直接用的(不管哪种继承都是)对于公有-->公有继承让子类外部也能用继承方式将比他访问权限大的变成他的访问权限,比他小的不变。
2024-07-06 19:16:34
346
原创 java1.8如何配置运行javafx
不用看别的配置文章!只要把idea里版本改java1.8就行!(封面为下了插件导致的错误,再说一遍,不用干别的!下了java1.8在IDEA,eclipse,命令行都能跑javafx代码。java1.8内置javafx,
2024-06-17 22:24:32
488
原创 C++string续
find_first_of参数里面的string与char*是每个字符的集合,指找出string里含有参数字符串的任意字符的位置,find找整个参数字符串的位置。补充:find_first_of类似C里面的strtok,从char*里找特定字符,但strtok是直接拆解。相同:都是从string里面找字符,传参格式一样(都可以从某个位置开始找)=》Q:为什么不能char*+char*,让冲裁函数类型隐式类型转换不行吗。不同:find_first_of只能找字符,find可以找字符串。五,整形与字符串互转。
2024-05-08 20:59:41
357
原创 switch语句深讲
1.switch语句如果不加break,在一次判断成功后会执行下面全部语句并跳过判断。6.case内不被认为是代码块,不能定义变量,要定义变量,可以在case中加花括号。3.default无论写在switch语句的哪个地方,都用来处理剩下的情况。建议:频率高的判断case写最前,default最好用来处理真默认其他情况。2.switch语句本身没有分支功能,分支功能由break完成。4.多种情况,一种输出,可以将部分条件不写break,写一块。7.case值必须是真常量,不能是const修饰的变量。
2024-04-25 22:25:53
276
原创 模板类,模板函数初识
要求:1.模板函数 必须在前面加上模板参数列表,告诉编译器是哪个模板的东西。2.模板类成员函数 在模板参数列表基础上 必须前面加模板名<所有模板参数>::2.不能声明与定义分离在两个文件。->编译器找这麻烦。
2024-04-21 20:10:31
353
原创 new[]与delete[]
new只比malloc多了个异常检测,不会额外开辟空间告诉delete[]要析构的次数,(其目的本也就是定义构造单个对象),所以,再调delete[],依然会向前int大小空间找析构次数,这没初始化的空间当然是随机值,可能很大可能很小,谁知道delete[]会析构多少次。operator new[]的底层是operator new[]与所有对象的构造,operator new[] 的底层是operator new,和。operator new[ ]实质做的:(加上构造为new[ ]做的)
2024-04-21 17:20:53
788
原创 静态成员与友元,内部类初识
1.静态成员变量(1)定义:类的定义中以静态声明的变量(2)写法:static +变量声明(3)注意:静态成员变量不在对象中,在静态区,所以不走初始化列表,只能在外部定义。1.不能给缺省值--->给了缺省值就会进初始化列表,找不到变量,出错2.不能在初始化列表中写3.外部定义时不能加static--->规定(类域限定符不包含static就会让其一般处理,即定义一个外部的新的变量)
2024-04-20 10:14:28
568
原创 初始化列表和隐式转换构造
类中成员变量初始化的地方(非静态)若要调用只能在初始化列表中加括号传参构造,不然初始化列表默认调用默认构造。不能通过给缺省值来调他的普通构造给缺省值必须要有赋值符号),拷贝构造可以,前者必须在初始化列表中写。将非对象成员直接通过赋值符号初始化对象。
2024-04-18 09:22:40
1394
原创 简单理解数据存取
1.从编写程序开始说起,源代码中初始化一个变量,在文本编辑器中显示的是10进制的数,2.程序运行后,先在内存开辟相应空间,然后:(开始实质用数据了)
2024-04-14 14:48:55
351
原创 构造析构理解与拷贝函数初识
无需传参的构造函数:1.无参构造。2.全缺省参数构造。3.编译器生成的构造。(一般三者取其一)1.缺省:涉及顺序表等可传参确定初始容量的,或其他可能在某些场景需要手动初始化特定值的。2.手动无参:内置类型需要初始化(也可以换为给内置类型变量给缺省值),或者需要动态开辟的。3.编译器构造:全为自定义类型,只需要在自定义类型里手动写构造,外部直接调。例子:双栈一类。为对象间的运算符赋予自己的含义。摘自菜鸟教程。
2024-04-10 21:49:57
823
原创 C++类与对象的初识
直接类是方法与属性(数据)的封装,如果外部可以随意调用,就可能会引起一些不必要的由程序员造成的问题,那么,限定类中成员的访问(专业说是选择性的给外部提供接口)则是安全又高效的做法。
2024-04-04 12:34:10
1020
原创 内联函数范围for初识
对于频繁调用的函数,我们C写法,会频繁开辟和销毁栈帧,在C语言中,处理方法是宏,但是仍有缺陷->太复杂,比如#define ADD(a,b) ((a)+(b))这并不简单:1.为什么不加分号->分号会被认为是宏的一部分2.为什么外部要加括号->防止宏展开外部有优先级大于+的运算符,例:3*ADD(2,3)会展开为3*(2)+(3),导致运算错误。
2024-04-03 09:06:18
272
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人