自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 静态库和动态库

✅ 静态库适合体积小、依赖少、无需频繁更新的程序;✅ 动态库适合大型项目、多个程序共享、经常更新库版本的情况。

2025-04-03 21:00:00 216

原创 在main函数中编写匿名函数

/ 定义一个 Lambda 表达式(匿名函数)" << endl;// 调用它sayHello();// 输出:Hello from Lambda!return 0;用法类型示例最简单带参数带返回类型捕获外部变量值捕获引用立即执行}(3, 4);

2025-04-01 15:19:22 169

原创 硬链接和软链接

对比项硬链接 (Hard Link)软链接 (Symbolic Link)inode 是否相同是,同一个 inode,多名字共享同一文件本体否,软链接有独立 inode,里面保存了目标的路径字符串对文件系统要求必须在同一文件系统内部可指向任意路径(可跨越文件系统)能否链接目录一般不可链接目录(除非特殊配置)可以链接目录是否独立文件不是独立文件,和原文件是同一个物理文件是独立文件,大小通常很小(只存路径),访问时需解析目标目标删除影响若硬链接数>1,删除某一链接不影响文件实际数据。

2025-03-28 21:08:47 584

原创 系统如何查找文件?inode号又是什么?

inode(索引节点)是类 Unix 文件系统中的一种数据结构,用于存储文件的元信息(metadata)。典型包含:文件大小、访问权限(rwx)、文件所有者(UID/GID)、时间戳(修改时间、访问时间等);数据块指针(block pointers),告诉操作系统文件内容在哪些磁盘块上。文件系统怎么定位文件?通过目录文件找到对应的 inode 号,再由 inode 查到磁盘上真正的数据块。inode 是什么?是存储文件元数据和数据块指针的结构体,不记录文件名;名称保存在目录项里。

2025-03-28 20:20:50 742

原创 僵尸进程和孤儿进程的基础知识

僵尸进程:子进程结束后,父进程尚未回收其退出状态时留下的进程占位。危害:占用系统 PID 资源,过多时可能导致无法创建新进程,影响系统的稳定和维护。预防/清理:父进程要正确调用wait()等函数、处理SIGCHLD信号,或者确保子进程在父进程退出后由init进程托管并回收。

2025-03-27 10:24:14 302

原创 进程和线程的区别

**场景** | **进程并行** | **线程并行** || **维度** | **进程(Process)** | **线程(Thread)** |- 例如:单个视频渲染软件启动16个线程,其中12个由P核超线程处理,4个由E核处理。

2025-03-20 10:42:43 423

原创 字符串输入方式

这些方法各有适用场景,在实际编程中应根据需要选择合适的方法,同时注意缓冲区大小和输入安全问题。这种方法会读取整行输入,但由于无法防止缓冲区溢出,从C11标准开始已经被废弃,不建议使用。这种方式会读取输入中的单词(遇到空白字符停止),适合读取单个单词。这种方式更安全,可以读取包含空格的整行输入,并且指定最大读取长度。注意:这种方法不检查缓冲区溢出,也无法读取包含空格的字符串。这种方式会读取整行,包括空格,直到遇到换行符。会将换行符也读入,如果不需要可以在读取后处理去除。

2025-03-19 11:15:00 160

原创 TCP 通信流程图

如果需要更加具体的代码示例、协议细节或者其他场景(例如 UDP、WebSocket、反向连接等),请告诉我!为便于阅读,采用 ASCII 画出大致示意。协议进行通信时的各个步骤。

2025-03-17 15:52:00 1723

原创 计算机端口的作用

使得计算机能够在同一个 IP 地址上同时运行多个网络服务。这样,服务器就能同时处理多个服务,而不会混淆数据。规则中,可以开放或关闭端口。你对端口的管理或使用有具体需求吗?

2025-03-17 15:21:18 932

原创 vim在Linux中的作用

在Linux中,所有的文件默认都是普通文件mkhahamkhaha.txtmkhaha.sh这些名字或者扩展名本身并不决定文件的类型,它们只是为了方便人类识别用途而已。Linux系统中,并不会严格依赖扩展名来决定文件类型。你看到的mkhaha-rwxr-xr-x开头的表示它是普通文件,而非目录(目录是以d开头)。文件是否能执行,是由文件的权限决定的(这里有x权限代表可执行),而不是由扩展名决定。Linux中文件名和扩展名不是强制的,而是习惯性的命名规则。

2025-03-17 11:00:00 573

原创 linux中yum和wget指令的区别

都是 Linux 上的下载工具,但它们的用途、下载方式和适用场景不同。📌 作用:查找包含 "git" 关键字的软件包。📌 作用:如果下载中断,继续下载文件。📌 作用:更新所有软件包到最新版本。源没有你需要的软件,你可以先用。下载 RPM 包,再手动安装。,如果缺少依赖,需要手动安装!,并自动安装所需的依赖项。,并自动安装所有依赖项。📌 作用:将网页保存为。如果你只是想下载一个。,如果你下载的是一个。,但不会自动安装它。

2025-03-13 21:00:00 858

原创 Linux中查询软件存在

你可以试试这些方法,看看你的 Linux 系统里有哪些软件!存在,它会返回路径,否则不会有输出。如果没有安装,则不会返回任何内容。如果某个软件没有安装,可以使用。存在,会显示安装信息。type <软件名>

2025-03-13 15:00:00 327

原创 Linux中grep指令

grep -i "warning" log.txt # 查找 "warning"(包括 Warning、WARNING 等)grep -e "error" -e "fail" log.txt # 匹配 "error" 或 "fail"grep "error" log.txt # 查找 log.txt 中所有包含 "error" 的行。grep -r "debug" . --exclude="*.log" # 递归搜索,排除 .log 文件。

2025-03-11 14:15:00 757

原创 Linux的mkdir指令用法

**安全性**:系统目录(如 `/bin`, `/etc`, `/usr`)通常需要管理员权限(`root`)才能修改,防止普通用户误操作影响系统稳定性。- **权限管理**:避免随意赋予 `777` 权限(所有用户可读写),尽量通过用户组(`chown` 和 `chmod`)精细控制。- **目录用途**:遵循 Linux 目录规范(如 `/etc` 放配置,`/opt` 放第三方软件)。- **系统目录(如 `/usr`)**:用 `sudo` 或提前配置权限。

2025-03-11 09:32:44 283

原创 Linux的基础操作指令

在指定的文件夹中创建文件,只需要提供完整路径。,不仅限于当前文件夹。来在任何可写的目录中创建文件。就不会因为目录不存在而报错。不会自动创建目录,必须先用。中创建文件,可以结合。

2025-03-10 14:29:36 238

原创 char int string 的互相转换

stringintC++string或char[])和int),它们的存储方式和操作方式不同。

2025-03-06 16:44:11 438

原创 substr 和 strcmp的区别和用法

是一个 C 语言中的字符串比较函数,定义在。类的成员函数,属于 C++ STL,定义在。它用于从字符串中提取一个子字符串。它用于比较两个 C 风格字符串(头文件中(C 语言中是。

2025-03-04 15:18:17 252

原创 物理内存与虚拟内存

物理内存指的是计算机中实际存在的硬件内存,通常是指随机存取存储器(RAM)。它是计算机运行程序和存储数据的主要存储介质,具有高速读写的特点。特点有限性:物理内存的容量有限,受硬件成本和技术制约。高速性:与其他存储设备(如硬盘)相比,物理内存的读写速度更快。直接访问:CPU可以直接访问物理内存中的数据和指令。物理内存是计算机中实际存在的硬件内存,容量有限但访问速度快。而虚拟内存。

2025-01-16 10:34:14 1269

原创 智能指针的初步探索

return a;返回类型int*: 该函数返回一个指向整数的指针。new操作符在堆(动态内存)上分配一个整数空间,并初始化为10。返回一个指向该整数的指针。int* a: 声明一个指针a,指向新分配的整数。return a;: 返回指针a,使得调用者可以访问该动态分配的整数。这段代码通过动态内存分配演示了指针的使用和内存管理的重要性。动态内存分配: 使用new在堆上分配内存。指针操作: 使用指针访问和操作动态分配的内存。内存释放: 使用delete释放分配的内存,防止内存泄漏。

2025-01-16 09:43:27 757

原创 类型之间的转换

std::stoi和(int)在功能和用途上有显著的区别,主要体现在和上。

2025-01-14 16:56:02 1034

原创 getling,find, substr,repalce的用法

为什么使用getline?getline能够读取包含空格的完整句子,而cin只能读取以空白字符为分隔符的单词。为什么需要清除换行符?cin >>操作后,换行符\n可能残留在输入缓冲区中。如果不清除,getline会读取这个换行符,导致跳过输入。如何清除换行符?使用,可以清除缓冲区中的多余字符(如换行符)。find:用于查找字符串中字符或子字符串的索引位置。substr:用于提取字符串的子串。replace:用于替换字符串中的某部分内容。这三个函数结合,可以高效地实现字符串的查找、提取和替换功能。

2025-01-14 16:24:36 766

原创 int ,long long ,unsigned int\long long 的表示范围

int是基本整数类型,通常占用4字节(32位)内存(在现代主流系统中)。有符号的int使用补码(Two's Complement)表示法,因此它的范围是:正数:包括零。负数:最小值由最高位(符号位)决定。long long是比int更大的整数类型,占用8字节(64位)内存。它也可以是有符号或无符号类型。

2025-01-14 14:46:16 1112

原创 c++中的友元

打破封装:友元关系允许特定的函数或类访问类的私有成员和保护成员,这有时在实际开发中是必须的,例如操作符重载、复杂的类间协作等场景。提升功能:通过友元函数或友元类,某些外部函数或类可以访问类的私有成员,执行一些通常只有类的成员函数才能执行的操作。控制访问范围:友元关系是受限制的,不是所有函数或类都可以访问类的私有成员,只有被声明为友元的特定函数或类才有权限。友元函数:允许外部函数访问类的私有成员。友元类:允许另一个类的成员访问类的私有成员。友元成员函数:允许另一个类的成员函数访问类的私有成员。

2025-01-10 14:59:36 821

原创 lower_bound 和 upper_bound

假设有一组自定义结构体,需要按某个字段排序并查找,可以通过提供自定义比较函数来使用和。int age;// 比较函数,根据年龄排序// 按年龄排序(假设已排序)// 查找第一个不小于30岁的人员});if (lb!// 查找第一个大于30岁的人员});if (ub!return 0;输出和是在有序序列中执行高效查找的强大工具。理解它们的工作原理和正确使用方式,可以大大提升代码的性能和可读性。

2025-01-09 12:00:00 759

原创 next_permutation 和 std::prev_permutation

这个函数将给定的容器排列到下一个字典序的排列。如果当前排列已经是最大的字典序排列,则返回false,并且容器会被重排为最小的字典序排列。原型这个函数将给定的容器排列到上一个字典序的排列。如果当前排列已经是最小的字典序排列,则返回false,并且容器会被重排为最大的字典序排列。原型和函数是从C++98标准开始就引入的。它们通过字典序生成排列,适用于任何容器类型(如std::array)的排列操作。这两个函数广泛应用于需要全排列或组合生成的场景,例如算法、数学问题、游戏设计等。

2025-01-09 10:45:00 297

原创 strcpy和memcpy的区别

strcpymemcpystrcpychar*<cstring>\0'\0'memcpy<cstring>strcpysrc\0memcpysrcnum\0'\0'\0'\0''\0''\0'strcpy适用于复制字符串(字符数组)。它会自动处理字符串结束符\0。memcpy适用于复制任意类型的内存块,比如结构体、字节数组等。它不会处理\0,只是按字节数复制。

2025-01-08 17:27:15 693

原创 setfill, fill 和 memset 的用法

是 C 标准库中的一个函数,用于快速初始化一段内存。它可以将某个值填充到指定的内存区域,通常用于清零或设置某种固定值。是 C++ 标准库中的一个函数,用于快速填充容器或数组的某个范围的元素为指定值。是 C++ 标准库中的算法函数,用于填充数组或容器的某个范围内的元素为指定值。一起使用时,可以指定一个固定宽度,当输出的内容不足该宽度时,用填充字符补齐。针对容器/数组填充。在现代 C++ 中,可以使用更安全、更高效的方式代替。设置输出时用来填充指定宽度的空白字符。的所有元素(包括起点但不包括终点)设置为。

2025-01-08 17:03:46 1036

原创 this指针

是用构造函数初始化对象p,并将30作为参数传递给构造函数。通常在表达式中用来创建临时对象,尤其是在赋值操作符中。

2025-01-07 16:14:43 695

原创 类对象作为类成员

对于包含多个成员变量(特别是对象类型成员)的类,使用初始化列表是最佳实践。初始化列表能够提高效率,避免多余的构造和赋值操作。通过初始化列表可以确保成员变量按照正确的顺序初始化,并且对于const或引用类型成员,初始化列表是唯一可行的方式。

2025-01-07 14:53:20 644

原创 B3680 [语言月赛202211] BAN-PICK

B3680 [语言月赛202211] BAN-PICK在大多数情况下, 是一个更高效且更灵活的选择,能代替 ,但并不是所有场景下都推荐直接使用 。以下是两者的使用原则和区别:可以替代的场景:例子:直接构造对象这里, 是直接调用了 的构造函数。如果用 ,需要创建一个临时对象:这样就多了一次临时对象的构造,效率略低。尽管 比 更高效,但并不意味着它总是优于 。以下场景下需要谨慎选择:例子:已有对象使用 也可以,但显得多余,因为它会尝试重新构造一个对象:场景 2:构造的参数过于

2024-12-27 20:00:07 1006

原创 B3702 [语言月赛202301] 华小科的旅行开始了 范围循环,结构化绑定

例如:2. 什么是? 是一个辅助函数,用于创建对象。 它可以根据传入的参数自动推导类型,不需要你显式地指定的类型。例如:两者的区别特性 使用构造函数 使用 语法 必须显式指定的类型,例如 不需要显式指定类型,类型由编译器推导 类型推导 无法自动推导,类型必须由程序员指定 能根据参数自动推导类型 使用场景 当你明确知道的类型时使用 当类型复杂或需要自动推导时使用 代码长度 相对冗长 相对简洁 在你的代码中的

2024-12-24 13:00:00 1019

原创 34. 在排序数组中查找元素的第一个和最后一个位置 二分法

在这道题中,由于数组中可能存在多个相同的目标值target,而普通的只能找到其中一个目标值,无法区分最左边还是最右边的位置。因此,我们必须来解决这个问题。mid8384target34为了确保找到target在数组中的和targettargetpos = midpospos = midpos假设target = 8。

2024-12-17 20:58:09 367

原创 707. 设计链表 链表的知识复习

默认构造函数:不带任何参数,创建一个val为0next为nullptr的节点。带一个参数的构造函数:只传入一个val参数,next默认为nullptr。常用于创建值已知但不关心next的节点。带两个参数的构造函数:同时传入val和next,用于创建值已知并且与其他节点连接的节点。这三种构造函数提供了不同的初始化方式,使得你可以灵活地创建和管理链表节点,特别是在处理链表时。是的,虚拟头节点(dummy head)会作为链表中的第一个节点,但它的作用并不是作为链表数据的 "实际头节点"。

2024-12-16 21:51:15 1214

原创 c++基础知识

在 C++ 中, 这种写法是错误的,原因是 数组引用 的语法不正确。让我来详细解释一下:在这里,你尝试使用 来声明 参数,意图是通过引用传递数组。但是,这种写法是不合法的。数组本身不能作为引用类型,因为数组类型的引用是有特殊语法要求的。如果你希望通过引用修改数组的内容,可以使用以下几种方式:通过指针传递数组(常见做法): 数组在函数传递时本质上是作为指针传递的。你传入数组时,实际上是传递了数组的首地址(即指向数组第一个元素的指针)。因此,使用指针参数是处理数组的标准做法。 在这种情况下, 是

2024-12-11 13:45:00 1339

原创 59. 螺旋矩阵 II

通过检查和,我们能够确保每次遍历的行和列是有效的,并且随着矩阵填充的进行,边界会逐步收缩,不会重复或越界。这是为了保证算法的正确性,避免填充无效的行和列。注意边界的处理要仔细。

2024-12-10 19:50:54 391

原创 209. 长度最小的子数组

滑动窗口法(双指针法)比暴力法更高效,时间复杂度由O(n^2)降低到O(n),适用于此类连续子数组和问题,特别是在处理较大数组时能够显著提高性能。这行代码的作用是判断是否找到了符合条件的子数组,如果没有找到符合条件的子数组,就返回0。0 : result;

2024-12-10 10:23:22 548

原创 977. 有序数组的平方

k记录数组中不等于val的元素数量。k同时也指向下一个可以放置不等于val元素的位置。通过,我们将所有不等于val的元素移到数组的前面,最终返回k,表示有效元素的数量。这种方式是原地修改数组,空间复杂度是O(1),且时间复杂度是O(n),因为只需要一次遍历。这种做法既高效又符合题目要求,不需要额外的空间来存储结果。是的,这里把leftSquare赋值给,即将leftSquare(当前左指针位置的平方值)存储到result数组的当前位置。

2024-12-09 21:09:12 664

原创 27. 移除元素

k记录数组中不等于val的元素数量。k同时也指向下一个可以放置不等于val元素的位置。通过,我们将所有不等于val的元素移到数组的前面,最终返回k,表示有效元素的数量。这种方式是原地修改数组,空间复杂度是O(1),且时间复杂度是O(n),因为只需要一次遍历。这种做法既高效又符合题目要求,不需要额外的空间来存储结果。

2024-12-09 20:31:16 759

原创 704. 二分查找

防止溢出的原因是通过减去left后再进行除法,避免了可能引起的溢出。也是一种有效的写法,因为它利用位运算代替了除法操作,达到相同的效果。这两种方法都能保证在计算中间值时不会发生溢出,而且都在大多数情况下运行良好。

2024-12-09 19:52:00 450

原创 P2562 [AHOI2002] Kitty猫基因编码

你完全理解正确!这段代码采用的是 直接返回值的方式,而不是对原先字符串进行修改,主要原因有以下几点:如果直接对原始字符串进行修改,当字符串中存在多个相同的 或 时,就需要对整个字符串的每个字符进行跟踪和修改。例如:因此,采用 直接返回值 的方式,可以避免这些问题,不需要对原字符串进行任何修改,所有逻辑都在返回值中完成。采用递归返回值的方式非常符合分治问题的特点:对于这道题:这种模式避免了原字符串的复杂修改,递归组合也非常简洁自然。递归过程中,字符串的不可变性是一个很大的优势:如果采用修改原字符串的方式,

2024-12-09 19:20:30 900

空空如也

空空如也

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

TA关注的人

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