C++
未读匿名函数 —— Lambda 表达式 1. 什么是匿名函数(Lambda 表达式)? 在 C++中,匿名函数通常指的是没有名称的函数,也叫做“lambda 表达式”。匿名函数可以在代码中定义并立即使用,常见于临时的、一次性使用的操作。对于类和对象来说,匿名函数常常用于定义类内部的行为或操作。Lambda 表达式的基本形式如下: 1[捕获列表](参数列表) -> 返回类型 { 函数体 } 捕获列表:决定了 lambda 函数是否可以访问外部变量。 参数列表:与普通函数一样,lambda 函数也可以接收参数。 返回类型:指定 lambda 函数返回的类型(如果不指定,编译器会自动推断)。 函数体:包含函数的实际操作。 示例: 1234auto add = [](int a, int b) -> int { return a + b;};std::cout << add(3, 4); // 输出 7 这里,[] 是捕获列表,表示 lambda 函数没有捕获外部变量,int a, int b 是参数列表,-> i ...
Git 的使用 1. Git 版本迭代 1. 查看 Git 版本 1git --version # 查看当前安装的 Git 版本号 2. Windows 系统更新 Git 访问 Git for Windows,下载最新版安装程序。 运行安装程序,如果存在旧版本会直接覆盖升级成新版本。 安装完成后,再次执行 git --version 验证。 2. Git 仓库的基本使用 1. 新建仓库 去 GitHub/Gitee 网页端,点击新建仓库,填写仓库名、介绍等信息。 可选择开源或私有,是否初始化 README、License、.gitignore 等,按需配置。 2. 初始化 Git 仓库(本地仓库) 1git init # 在本地初始化一个空仓库(会生成隐藏的 .git 文件夹) 3. 关联远程仓库 添加 GitHub 或者 Gitee 仓库作为远程地址(默认命名为 origin): 12git remote add origin 仓库链接 # 把远程仓库链接绑到本地,默认叫 origingit remote -v # 查看远程仓 ...
数学相关算法 1. 根据数据范围猜算法 算法数据范围初定:单数据 10 的 9 次方以内无脑用 int,单数据 10 的 18 次方以内无脑 long long,更高的数据量需要考虑 long double(10 的 308 次方左右),但是注意:long double 虽然能表示很大的数,但精度不够稳定,误差较大!对准确性要求极高的场景下,就不太靠谱了。这时就需要考虑高精度算法和计算库了。还有在多数据涉及加法和乘法操作时,注意边界溢出! 1. 不同数据规模下可接受的算法时间复杂度 数据规模 O(logn) O(√n) O(n) O(n×logn) O(n²) O(n³) O(2ⁿ) O(n!) n ≤10 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ n ≤30 ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ n ≤100 ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌ n ≤10³ ✅ ✅ ✅ ✅ ✅ ❌ ❌ ❌ n ≤2×10⁵ ✅ ✅ ✅ ✅ ❌ ❌ ❌ ❌ n ≤10⁷ ✅ ✅ ✅ ❌ ❌ ❌ ❌ ❌ n ≤10⁹ ✅ ✅ ❌ ❌ ❌ ❌ ❌ ❌ n ≤10¹⁸ ✅ ❌ ❌ ...
Linux
未读动静态库 —— 动态库 1. 库的制作者 如何制作动态库 1. 编写库的源代码和头文件 创建头文件:声明库的对外接口函数。 创建源文件:实现头文件中声明的函数。 2. 编译为位置无关目标文件 -fPIC 关键作用:生成位置无关代码(Position Independent Code),使代码可被加载到内存任意位置,这是动态库的核心要求。 3. 链接生成动态库文件 -shared 参数:指示链接器生成共享库(.so 文件)。 4. 组织发布文件 将以下文件提供给使用者: 1234├── include/ # 头文件目录│ └── mathlib.h # 接口声明└── lib/ # 库文件目录 └── libmathlib.so # 动态库二进制 2. 动态库 demo 1. mathlib.h(头文件)—— 对外接口声明 12345678//相当于 #pragma once , 用于防止重复包含头文件#ifndef MATHLIB_H#define MATHLIB_Hint add(int a, int ...
4630436162ade97ba2718b7d0c4b3b6345cfbadc0d32b89a1bd3fd7ce10543c112980c579714dbaddada922bb1c5210d84f7f04fda52e137b1cb9270e49d94cbcb6f7b4f2a8382b1e2f940e5ef3b6277756321af41592d0f85e2f3290fe6ea07ba1464b00c849dad4933b82ce09a6614623baaf0923503c5e40bc0bef581ae2c47c628d46ad390d59062dd32a0425ceceb5f83cf472456ea8829584f745a049799478e3af5f9c05694a9ca05cce60716763be78540d366773135d245065c1109a82cac8d68a67445f18390970f15ebbaddc5347a1cc2e528a32ab9afe51fef63551e0e7308e5390d3336b8f68b628bd511d6b750761a280ff ...
Linux
未读动静态库 —— 静态库 稀土掘金 | 动静态库的认识 CSDN | 理解文件系统|文件缓冲区|软硬链接|动静态库 CSDN | 相关好文 CSDN | 相关好文 1. 扩展概要(了解) 一个文件被打开操作系统要做什么:打开文件的流程 = 找 inode ➜ 创建 file 结构 ➜ 建立缓冲 ➜ 用页表映射读写 ➜ 后续 read/write 就操作 page 缓冲。 1. 为什么说“4KB Page”是核心单位? 现代操作系统使用 分页机制(Paging) 管理内存,每一页(Page)是 一块固定大小的内存单元。Linux 默认: 一页大小为 4KB。 物理内存也以页框为单位分配(如 Frame #0,Frame #1…)。 所有虚拟内存地址映射到物理内存页框时,以 4KB 为基本单位。 地址空间 页面大小 含义 虚拟地址空间 4KB/page 每个进程有自己的虚拟地址空间 物理内存 4KB/frame 物理内存被划分为一个个页框 页面表(Page Table) 将虚拟页映射到物理页框 所以:所有读写、分配、预加载、换页,都是以“页”为单位 ...
Linux
未读inode 与软硬链接 先说明一下前面没有解释的东西:文件权限后面的 1 是什么? 1. 软链接(Symbolic Link / Symlink) 1. 概念 软链接是一个特殊类型的文件,它的内容是一个 路径字符串,指向原始文件的路径。 就像 Windows 的 快捷方式; 保存的是目标路径; 用途:可以在任何地方“引用”一个程序、配置文件、目录; 常用于: 给程序创建入口路径(比如 /usr/bin/python 链接到 /usr/bin/python3.11); 让你在任意位置执行程序; 多个配置环境之间切换。 特性 描述 inode 不一致 链接文件有自己的 inode,数据内容是“路径名” 可跨分区 因为只是保存路径字符串,不依赖 inode 可对目录使用 如 /usr/bin/python 链接到 /usr/bin/python3.11 不影响原文件 原文件不变,软链接只是一个指向的“引用” 2. 相关命令 12ln -s 源文件或目录 软链接文件名ln -s /真实路径/程序 /usr/local/bin/程序名 12ln -s ...
Linux
未读理解文件系统 1. 认识磁盘磁带 由于磁盘磁带和操作系统组成原理更相关,而且相关概念用语言太抽象,所以我找到了一些比较好的视频和书籍内容来帮助理解(注意视频、书籍内容有部分知识我们不涉及,所以不懂也没关系,多出的就当是眼界扩展了): 硬盘驱动器是如何工作的?(You Tube) 硬盘的工作原理(B 站) 机械硬盘是如何工作的?(B 站) → 机械磁盘:结构与工作原理详解 → 磁带为何能记录声音?(主要了解其存储原理) 相关文章 | 博客园 相关文章 | CSDN 相关文章 | CSDN 摘自《操作系统概念精要 原书第 2 版》298 页前后(真的是很想将内容直接摘过来,奈何实在是没找到电子版,只能扫描现书将就看吧 😂)。这里的图片已经排好序,直接按照顺序看即可。推荐直接去看原书,也希望有电子版的进行贡献一下,感谢您的开源精神! 自然也少不了鸟哥啦~ 摘自《鸟哥的 Linux 私房菜 基础学习篇(第四版)》210~217 页相关内容。还是推荐看原书,就不过多赘述了。 首先说明一下磁盘的物理组成,整颗磁盘的组成主要有: 圆形的盘片(主要记录数据的部分); 机械 ...
Linux
未读缓冲区 相关文章 | CSDN 1. 为什么需要缓冲区?(核心原因) 先出结论:格式化 ➔ 拼接成大数据块 ➔ 缓冲 ➔ 统一输出 ➔ 保证数据连贯,减少系统调用,提高效率! 1. 提高 I/O 效率! 硬件设备(尤其是磁盘、网络、终端)操作 很慢很慢,每次读写都直接操作设备 ➔ 太耗时 ➔ 系统负担重。 所以: 少量多次 ➔ 聚集成大量一次。 把「很多小的写操作」放到内存中,攒到一定量再「统一批量」写入磁盘/屏幕。 减少系统调用(syscall)次数 ➔ 提高整体程序运行效率。 简单比喻:你买菜如果每买一根葱就跑一次超市,累不累?当然要一次性买一堆,装个购物袋带回来!(这就是缓冲思想) 2. 配合格式化 printf("名字:%s, 年龄:%d\n", name, age); 这种格式化输出,本质上做了两件事: 格式化处理(Format) %s、%d 等占位符 ➔ 根据数据类型,把 name 和 age 这两个变量 格式化成字符串。 例如:把整数 23 转成 "23",字符串 "Tom" 保持原样。 统一输出 ...
Linux
未读重定向 相关好文 | CSDN 1. 什么是重定向? 重定向本质上就是操作文件描述符(每一个打开的文件或设备在内核中都有一个编号,称为文件描述符),即 修改标准输入/输出/错误 这三个文件描述符(file descriptor,简称 FD)的指向,让它们 不再指向默认终端(屏幕、键盘),而是指向 文件、设备或者其他地方。 文件描述符编号 描述 默认指向 0 标准输入 stdin 键盘 1 标准输出 stdout 屏幕 2 标准错误 stderr 屏幕 比如常见的 shell 命令: 1ls > output.txt 背后的本质动作是: 关闭文件描述符 1(stdout) 打开或创建 output.txt 将描述符 1 指向 output.txt 文件 这样,所有本应该显示在屏幕上的内容,都会写入 output.txt 文件。 2. 常见的重定向符号 符号 含义 功能描述 示例 效果 > 输出重定向(覆盖),stdout 把标准输出写入到指定文件,若文件存在则 清空 后写入,否则创建 ls > out.txt 将 l ...











