- 博客(36)
- 收藏
- 关注
原创 进程间的通信
进程单独运行时,不论是父子进程还是其他进程,这些进程各干各的,独立性较高。但有时我们需要不同进程之间进行协同工作,这需要打破进程间的独立,使进程之间达到通信交流的效果,这就是本文章要提及的进程间的通信。进程间具有独立性,而进程间通信的本质是能看到同一份"资源"!问题:如父子进程间共享代码、数据,理论上是能看到同一份资源,那为何也能称为独立?答案是子进程确实能看到父进程共享的内容,但子进程却无法更改父进程的数据,原因是因为存在写实拷贝,所以父子进程无法相互传递。所以。
2025-12-17 21:37:43
768
原创 头文件与目标文件的关系
(本段算是具体总结)我们要先理解头文件与目标文件的作用,头文件(.h)用于函数的声明,而目标文件(.o/.obj)则是对头文件里声明函数的具体函数定义。在调用目标文件时为什么要用头文件?因为编译器看不到目标文件的定义,目标文件的本质是打包成二进制的文件,是具体方法的实现。而头文件则是记录了方法,告诉编译器这些方法的存在。即头文件是告诉编译器“这个函数存在并且怎么用”,目标文件是告诉链接器“这个函数的具体代码”。在调用库时两者需结合才能调用具体函数方法。
2025-12-16 23:10:36
864
原创 动静态库的制作和使用
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是⼀种可执行代码的二进制形式,可以被操作系统载入内存执行。
2025-12-15 23:52:56
1946
原创 笔试强训day4
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。仔细观察我们可以使用公式:dp[ i ][ j ] = dp[ i-1 ][ j ] + dp[ i-1][ j-1],即使是杨辉三角的边界也变成1+0=1。给定正整数n,请输出杨辉三角形的前n行。
2025-11-30 22:41:52
731
原创 笔试强训day3
读入 n,x 给出 n 个数a[1],a[2],……,a[n],求最小的区间[l,r],使 a[l] + a[l+1] +……+ a[r] ≥ x,若存在相同长度区间,输出 l 最小的那个。规定一种对于复合词的简写方式:只保留每个组成单词的首字母,并将首字母大写后再连接在一起。简写方式为:取每个单词的首字母并将其转换为大写,然后按原单词顺序依次连接。第一行两个数,n(1≤n≤10000000),x(1≤x≤10000)现在输入一个由若干单词组成的复合词,请输出它的简写形式。一个正整数,代表和的最小值。
2025-11-29 21:52:32
556
原创 环境变量——PATH
Linux下系统命令的本质是一个可执行文件,而系统通过环境变量PATH来记录相应命令的执行文件的路径,当调用命令时,系统即在其记录路径下寻找相应命令文件并运行。我们可以通过添加路径使系统对我们自制命令进行搜索执行!以此做到手搓系统命令的目的。今天的学习到此结束\\\\٩( 'ω' )و ////
2025-11-29 21:52:09
1777
原创 笔试强训day2
因为我们可以设置初始点在 dp[0] 和 dp[1] ,并且每次我们只可以走一步或两步,我们可以思考dp[2]是dp[0]跳2步、dp[1]跳1步(不考虑dp[0]跳到dp[1]再跳到dp[2],因为这样花费一定更大,只能从前一步与前两步二选一)。输入包含有多行,第一输入一个整数n(1≤n≤105),代表数组strs的长度,第二行有两个字符串分别代表str1和str2,接下来n行,每行一个字符串,代表数组strs (保证题目中出现的所有字符串长度均小于等于10)。输出一行,包含一个整数,代表返回的值。
2025-11-27 20:04:18
820
原创 笔试强训day1
请统计某个给定范围[ L, R ]的所有整数中,数字2出现的次数。比如给定范围[ 2, 22 ],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。输入共1行,为两个正整数L和R,之间用一个空格隔开。输出共1行,表示数字2出现的次数。需要我们取指定范围里出现的所有2,即通过不断%10 与 /10 来取不同位数的2。
2025-11-27 20:03:50
687
原创 进程信息——标示符
进程每次启动时的pid都可能不同,但其父 id 相同,如下图三次启动进程,进程自己的id(pid)一直在改变,但其父id(ppid)却不变:(子进程是在父进程pid的基础上进行创建子进程的)的知识可以得出结论:fork函数赋予变量的值一定,但在fork分流后相当于执行两次fork后的代码,父子进程各一次,而fork返回给父子进程的变量的值也不同,所以出现变量即等于0又大于0的情况。进程还存在着一种 id 叫 ppid ,ppid为父进程 id,其代表的是当前进程的父进程的 pid。
2025-11-25 09:51:30
456
原创 进程的概念
task_struct的基本概念:进程信息被放在称为进程控制块的数据结构中(数据结构内容为进程属性的集合),其统称为PCB(不同操作系统的数据结构 细节可能不同),而在Linux操作系统下的PCB为task_struct。用于记录下一条程序的地址,当进程遇到某种情况造成进程的停止、异常等行为时,可通过程序计数器获取到指定命令地址,通过该地址可继续执行之前的进程。系统在设置进程时,为了区分方便管理,会为每个进程独特的"命名",即 pid ,每个进程的 pid 都是唯一的。
2025-11-25 09:33:36
1177
原创 linux之Access,Modify,Change
在linux操作中存在着Access,Modify,Change这三种与文件时间有关的属性。
2025-11-08 16:43:31
331
原创 make与makefile
我们在Linux操作时,需要大量的指令对文件进行编译工作,在此过程中需要反复敲出重复的代码,这大大降低了我们的编程效率。而make与makefile则可帮助我们减少了指定命令的编写,通过提前编译好命令,在需要时只需要调用特定命令,即可调用一系列已经设置好的命令,达到节省时间的效果。
2025-11-08 16:42:20
925
原创 vim及其模式的操作
Vim是一个强大的文本编辑器,全称叫Vi IMproved,而vi则是Visual Interface的缩写,他们处理都是ASCII码字符数据;vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。
2025-10-21 22:54:14
1542
原创 queue和priority_queue及其函数
相信你可能有疑问,明明已经给了大堆和小堆优先级的规则设定可以进行替换,为何还要自己写优先级的设定呢?答案是当我们自定义类型且有多个参数在这类型中时,原先给的规则将不再适用就如我们设定一个包含两个参数的自定义类型,一个表示年龄,一个表示编号,此时原先的队列规则就不知道比较年龄来排序还是比较编号排序所以我们就需要自定义优先级的规则来给优先级队列进行排序优先级定义样例//定义一个自定义类型nodeint x, y;
2025-05-23 19:34:35
1096
原创 vector及其函数
Vector 是 C++ 标准模板库(STL)中的一种序列容器,它可以动态地增长和缩小,是基于数组的数据结构,但提供了自动管理内存的能力。这意味着与传统的数组相比,vector不需要手动分配和释放内存,使其成为 C++ 中非常灵活和功能强大的数据结构使用vector需要包含头文件<vector>
2025-05-19 15:35:49
1371
原创 string及其函数
string在C++中,是C++标准库中是用于处理字符串的标准库类,它提供了一系列成员函数和操作符,使得字符串的操作更加方便和灵活使用string必须包含头文件<string>
2025-05-15 21:05:24
879
原创 《牛客》二分查找-Ⅰ(C++)
牛客的刷题之路不停歇 ⌓‿⌓不积跬步无以至千里,不积小流无以成江海有序且无重复的数组查找目标值,简单的二分模板即可实现。
2025-05-15 21:03:14
288
原创 顺序表及顺序表操作
int size;}SL;对于这个结构体size指向有效元素后一位,方便了解数组有效元素的个数capacity指向整个数组的末尾,以此识别数组总数。
2025-04-27 10:55:28
747
原创 C++的六个默认成员函数
对于类来说,如果类中没有任何成员则被称为空类。但空类就意味着没有类吗?答案是否定的,因为类中存在着一些默认成员函数,这些默认成员函数构成类的基本功能。既然类已经默认设置了其成员函数的功能,为何需要我们了解呢?
2025-04-27 01:18:14
2109
原创 类与对象(上)
c语言的方法和数据是分离的,数据放在结构体内c++的数据与方法放在类里类的定义:类的主体;特殊类的定义:类的主体;class和struct都为定义关键字,需要区别的是class默认为私有的,struct默认为共有的stack为类的名字(可根据需要修改){}内部为类的主体;为类的结尾C++的类名就是c语言中的类型C++的类为一个整体定义在类面的成员默认以inline的方式展开。
2025-04-20 13:39:01
651
原创 inline与宏函数的初概念
define 宏名 替换文本1.添加了分号(;例子:当时,实际代码为:;宏函数进行替换时会带着宏函数定义时的分号(;一般情况下不影响,因为分号(;)代表的是语句的结束,多一个分号(;)也只是多一个空语句。但当使用if判断时if(A)实际为if(1;,带入的分号(;)直接导致代码报错。所以宏函数定义一般不带入分号(;2.未加外括号例子:当时,实际代码为:因为没有外括号,所以宏函数替换后并没有先进行原本宏函数理想中进行的操作,而是先进行优先级更高的操作3.未加里括号例子:当。
2025-03-22 18:51:16
685
原创 蓝桥杯练习--搜索(回溯)
本篇为练习搜索中的回溯方法,解释请看代码注释。有多道题本质相同,只需要改变部分条件即可实现目的。希望能通过写文章并用相似题目练习来熟悉掌握这部分内容,题目后面的注释即为相同练习,代码解释同备注所示题目相识把 1∼n的 n 个正整数排成一行后随机打乱顺序,按字典序输出所有不同的方案。输入一行,包含一个正整数 n。(1≤n≤8)输出 n!行,每一行为一种方案。字典序较小的先输出。3。
2025-03-17 16:48:13
1169
原创 C++基础知识
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。格式为 : 类型& 引用别名 = 引用对象;如 int& b = a;
2025-03-04 10:54:29
1837
原创 单向链表及单向链表操作
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)
2025-02-18 18:09:18
624
原创 扫雷的实现
在排雷游戏的基础上,为了优化体验,减少不必要的输入,可以设置一个函数,作用是对周围进行识别与判定,输入位置周围没雷时向周围4个(上下左右)或8个方向进行识别与判定,并通过递归的方式对新坐标再次进行识别判定。思路:传入一个位置并对周围八个方向进行识别并记录了周围雷数。通过函数体对显示的棋盘与放置雷的棋盘进行初始化。对以(x,y)为中心对周围八个坐标进行识别。思路:可用对数据进行识别属于的' * '为了节约时间,会修改雷数来对功能进行测试。思路:运用for循环进行数组的赋值。扫雷需要实现的基础功能。
2025-01-15 21:22:12
983
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅