自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 缓冲区的理解和实现

【代码】缓冲区的理解和实现。

2026-01-03 16:35:57 204

原创 重定向和“Linux下一切皆文件”的理解

2026-01-01 17:56:11 61

原创 文件基础以及文件访问的本质

2025-12-31 21:42:48 108

原创 Linux下的shell程序

【代码】Linux下的shell程序。

2025-12-28 00:12:38 228

原创 哈希(C++)

顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN),搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:(1)插入元素。

2025-12-23 20:50:05 593 1

原创 linux进程的替换

2025-12-20 15:54:21 152

原创 Linux进程的等待

【代码】Linux进程的等待。

2025-12-16 16:33:03 109

原创 Linux下进程的控制

在 linux 中 fork 函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。

2025-12-13 10:27:30 372

原创 Linux下进程地址空间

总结:• 变量内容不一样,所以父子进程输出的变量绝对不是同一个变量• 但地址值是⼀样的,说明该地址绝对不是物理地址• 在Linux地址下,这种地址叫做虚拟地址• 我们在⽤C/C++语⾔所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由操作系统统一进行管理注意:操作系统必须负责将虚拟地址转化成物理地址。

2025-12-11 10:32:01 125

原创 Linux下环境变量和命令行参数

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

2025-12-06 17:29:22 462 1

原创 C++之unordered_set和unordered_map

1. unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3. 在内部, unordered_map没有对<kye, value>按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。

2025-12-04 22:44:25 810

原创 C++map和set的实现

实现STL中的map与set底层使用的是map和set。

2025-12-04 17:03:30 127

原创 C++之红黑树

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。注意:红黑树确保没有一条路径会比其他路径长出俩倍,也就是说最常路径不超过最短路径的两倍。

2025-12-02 21:29:28 535 1

原创 C++之AVL树

二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson - Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。

2025-12-01 00:00:03 349 1

原创 C++异常处理

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了public:, _id(id)protected://错误描述信息int _id;//错误编号class SqlException : public Exception//sql组public:return str;

2025-11-29 13:51:40 1014

原创 C++ map和set

set介绍1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。

2025-11-28 18:41:05 1076 2

原创 二叉树OJ题

思路:先进行递归,然后进行前序遍历,然后在左子树的递归前后加上括号,在右子树的递归前后加上括号然后在处理不要括号和要括号的情况。

2025-11-25 01:01:43 330

原创 搜索二叉树

二叉搜索树又称二叉排序树或二叉查找树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树注意:从根节点依次往下找,最多最多找高度次数:因为这颗二叉树走中序遍历是升序排序,所以这棵树又叫二叉排序数。

2025-11-22 16:10:04 374 1

原创 C++ 多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写(调用函数是重写的虚函数)重载:两个函数位于同一个作用域之内,并且两个函数的函数名相同,参数不同。

2025-11-19 00:23:17 675 1

原创 Linux下进程的状态和优先级

Linux内核源代码• R运行状态(running):并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏队列里• S睡眠状态(sleeping):意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠• D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束• T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的。

2025-11-16 15:14:11 1044 1

原创 Linux进程的概念和创建

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系截至目前,我们所认识的计算机,都是由一个个的硬件组件组成• 输入单元:包括键盘, ⿏标,扫描仪, 写板等• 中央处理器(CPU):含有运算器和控制器等• 输出单元:显示器,打印机等上面的五大部件,他们都是分开的,那要让他们各个部件连接起来,需要用到“线”,这个线就叫总线,总线分为两种:1.系统总线,2.IO总线注意::• 这里的存储器指的是内存• 不考虑缓存情况,这里的CPU能且只能对内存进⾏读写,不能访问外设(输

2025-11-15 10:58:19 564 2

原创 Linux开发工具(4)

注意:git是一个具有网络功能的版本控制器,且其客户端和服务的是一体的。

2025-11-09 21:39:17 845

原创 Linux系统程序--进度条

补充知识:\r是回车,\n是换行,回车仅回到该行的开头位置,而换行则是回到下一行的开头位置注意:以下代码均在Linux下进行测试和执行:补充两个关于将缓冲区的东西强行输出的函数fflush:stdout:版本一:processbar.c:processbar.h:test.c: 版本一运行后:版本二:processbar.c:processbar.h:test.c:版本二运行后:makefile:

2025-11-06 19:05:20 343 1

原创 C++ 继承

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。// 学号int _major;// 专业。

2025-11-05 18:34:03 838 1

原创 C++模板(2)

【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-11-03 20:25:52 811 1

原创 Linux开发工具(3)

(1)makefile中的注释使用#(2)make会自动推到makefile中的依赖关系,且推到的过程是一种栈式的结构(3)make会根据源文件个目标文件的新旧,来判断是否需要重新执行依赖关系进行编译,也就是说make不一定总是能被执行(4)如果不想在make执行的时候显示细节,可以在依赖方法前面加上@符号即可。

2025-11-02 20:11:05 810

原创 Linux开发工具(2)

1.预处理(进行宏替换 / 去注释 / 条件编译 / 头文件展开等)2.编译(生成汇编)3.汇编(生成机器可识别代码)4.链接(生成可执行文件或库文件)(1)预处理(进行宏替换)• 预处理功能主要包括宏替换,文件展开,条件编译,去注释等• 预处理指令是以#号开头的代码行• 实例 : gcc –E test.cpp –o test.i • 选项“ -E”, 该选项的作用是让gcc在预处理结束后停止编译过程• 选项“ -o”是指目标文件,“.i”文件为已经过预处理的C原始程序• 选项“ -Dx

2025-11-02 01:25:30 900

原创 C++ 优先级队列、仿函数、反向迭代器

仿函数又叫函数对象,仿函数(functor)是一种特殊的对象,它的行为类似于函数。这是通过在类中重载operator()运算符来实现的,仿函数的主要优点是它们可以像普通函数一样被调用同时还可以保持状态信息,这是普通函数无法做到的。仿函数的定义:它是一个类,这个类重载了operator(),使得这个类的对象可以像函数一样被调用这种对象通常用于STL算法中,作为一种灵活的函数调用机制。仿函数的特点包括:1.它不是函数,而是一个类。2.它通过重载operator()来模拟函数调用。

2025-11-01 11:22:48 656

原创 C++ stack和queue的使用

1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作 :empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用。

2025-10-29 19:56:56 842 1

原创 C++ stack和queue之OJ题目

设计一个支持 push,pop,top操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类 :MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素,时间复杂度位O(1)思路:用两个栈,然后用其中一个栈存储数据,另一个栈存储每次往里push数据时,当前的最小数,也就是对应那个栈的最小元素。

2025-10-28 23:05:36 800

原创 C++list类的模拟实现

将整体的实现放在list.h头文件中注意:const迭代器和普通迭代器使用两个模板参数就可以完成。

2025-10-27 14:45:15 269

原创 C++ list 类的使用

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2025-10-26 13:31:45 608 1

原创 Linux开发工具(1)

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执行程序但是这样太麻烦了, 于是有些⼈把⼀些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装软件包和软件包管理器, 就好比"App"和"应用商店"这样的关系.yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora,

2025-10-25 22:33:18 1258 1

原创 Linux权限

(1)目录的可执行权限是表示你可否在目录下执行命令(2)如果目录没有 - x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即目录仍然有 - r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)(3)而如果目录具有 - x 权限,但没有 - r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限(4)所以在目录下,即使可以执行 ls 命令,但仍然没有权限读出目录下的文档。

2025-10-23 23:50:43 755 2

原创 vector之OJ题目

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间思路:异或。

2025-10-22 13:43:07 620

原创 Linux基本指令(3)

时间相关的指令日志的概念:日志就是时间,日志可以帮我们更清楚的知道程序是什么时候挂掉的,所以程序每运行到一个关键节点,就需要打日志。

2025-10-20 23:17:46 650 1

原创 C++ vector类的模拟实现

结论:(1)上述代码发生的问题是vector是深拷贝,但是bector的空间上存的对象是string数组,使用memcpy导致string对象的浅拷贝。(1)vector中的erase和insert迭代器对象后,不能在访问这个迭代器,我们认为它失效了,访问的结果未定义。T是像string这样的深拷贝的类,调用的是string的复制重载,实现string对对象的深拷贝。(3)如果对象中涉及到资源管理时,千万不能使用memcpy进行对象之间的拷贝,因为memcpy是。二、vector测试函。

2025-10-19 23:10:13 365 1

原创 C++ vector类的使用

vector的文档介绍1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2025-10-19 14:22:40 1086

原创 C++ string类的模拟实现

(1)在insert函数插入的时候,pos是size_t,end也是size_t,如果不改变类型,那么当pos是0时,会出现死循环,因为end不能减成-1,二如果仅仅将end改变成int类型,也是不够的,因为end是int类型,而pos是size_t,二者相遇会发生整型提升,所以要对pos进行强制类型转换程int,或者给一个静态的npos,给npos赋初值-1,然后在循环条件中多加一个end!=npos(2)类的成员函数的声明和定义不要分离,分离会报错。

2025-10-18 09:46:04 236 1

原创 C++ string类的使用

STL(standard template libaray - 标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2025-10-15 21:02:35 800

空空如也

空空如也

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

TA关注的人

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