- 博客(19)
- 收藏
- 关注
原创 从零手撕C++ string类:详解实现原理与优化技巧
是日常开发中最常用的类之一,但你是否好奇它的底层实现?本文将带你从零实现一个简化版。),覆盖构造、拷贝、动态扩容、运算符重载等核心功能,并分析常见陷阱与优化方法。:C++初学者、面试备战者、对STL底层感兴趣的开发者。通常经过高度优化,比手动遍历更高效。
2025-03-24 22:26:04
1030
19
原创 Linux 中 Git 使用指南:从零开始掌握版本控制
Git 是一个分布式版本控制系统,用于跟踪文件的修改历史,帮助开发者高效协作和管理代码。无论是个人项目还是团队开发,Git 都是不可或缺的工具。
2025-03-15 16:14:34
618
17
原创 C++ 模板初阶:从模板参数到模板类与类模板
特性模板类类模板定义通过模板参数生成的具体的类模板的定义,生成类的蓝图实例化已经实例化为具体的类需要通过模板参数实例化为具体类使用方式直接使用需要指定模板参数模板参数分为类型参数和非类型参数,使用时需要注意作用域、默认值和推导规则。模板类是通过模板参数生成的具体的类,而类模板是生成类的蓝图。掌握模板的基本用法是理解 C++ 泛型编程的关键。
2025-03-02 22:52:44
414
22
原创 C++ 内存管理:深入理解 new、malloc、delete 和 free
newnew是 C++ 的关键字,用于动态分配内存并返回指向该内存的指针。对于内置类型(如intdouble),new会调用构造函数(如果有)并初始化内存。示例:// 分配内存并初始化为 10mallocmalloc是 C 标准库函数,用于分配指定大小的内存块。对于内置类型,malloc只分配内存,不会初始化。示例:// 分配内存,未初始化new对于自定义类型(如类或结构体),new不仅分配内存,还会调用构造函数。示例:public:// 分配内存并调用构造函数。
2025-03-02 22:32:02
632
7
原创 从入门到精通:Linux 权限管理(rwx/chmod/chown)
想象一下,你的 Linux 服务器存放着重要数据,如何防止他人误删文件?如何让团队协作时部分文件可编辑、部分只读?这一切都依赖 Linux 的权限系统。它通过“屏蔽”某些权限位,确保新建文件或目录的权限符合安全规范。(权限掩码)是 Linux 中一个关键参数,用于控制。),因为普通文件默认不应有执行权限(避免安全隐患)。,但为了方便记忆,可简化为“减法”。
2025-03-01 09:47:41
831
6
原创 C++类与对象深度解析(二):从const 、new 、delete到函数操作符与友元函数的编程实践
在C++中,运算符重载和友元函数是面向对象编程的重要特性。而友元函数则允许外部函数访问类的私有成员。)用于将一个对象的值赋给另一个对象。但对于自定义类型(如类或结构体),我们需要通过重载赋值运算符来实现特定的赋值逻辑。例如,实现一个类的加法运算符重载,并允许外部函数访问私有成员。)是一个非成员函数,但它可以访问类的私有成员和受保护成员。静态成员变量属于类,而不是类的某个对象。静态成员函数属于类,而不是类的某个对象。可以用于修饰变量、函数和类成员,具有不同的作用。成员函数表示该函数不会修改类的成员变量。
2025-02-26 21:55:44
864
9
原创 C++类与对象深度解析(一):从引用、内联函数到构造析构的编程实践
拷贝构造函数是一个特殊的构造函数,用于通过已存在的对象创建一个新对象。用已有对象初始化新对象对象作为函数参数传递(值传递)对象作为函数返回值(值返回)默认的拷贝构造函数是浅拷贝直接复制成员变量的值(包括指针地址)如果类中有指针成员,会导致多个对象指向同一块内存需要手动实现拷贝构造函数为指针成员分配新的内存复制指针指向的内容,而不是复制指针地址浅拷贝深拷贝复制内容复制指针地址复制指针指向的内容内存安全性多个对象共享同一内存,易导致崩溃每个对象拥有独立内存,安全可靠。
2025-02-19 17:39:44
796
16
原创 七大排序算法详解:从原理到实现(希尔/堆排/快排/归并等)
两部分,每次从未排序部分取出第一个元素,在已排序部分从后向前扫描,找到合适的位置插入。时间复杂度:平均O(n log n),最坏O(n²)(可通过随机选pivot优化)。:选基准值(pivot),将数组分为“小于pivot”和“大于pivot”两部分。基准值(pivot),将数组分为“小于pivot”和“大于pivot”两部分。:交换堆顶元素(最大值)与末尾元素,缩小堆范围并重新调整堆,重复直至有序。时间复杂度:最好O(n)(已有序),平均O(n²)。时间复杂度:最好O(n)(已有序),平均O(n²)。
2025-02-10 22:56:10
1115
10
原创 新手关于学习二叉树的感悟
1.根 2.子树:一个节点含有子树的个数称为该节点的度:度为0的节点:度不为0的节点一颗树中,最大节点的度称为树的度具有相同父亲的节点称为兄弟节点树中节点的最大层次 一个节点最低层次为1 如果为0的话,空树就为-1,所以推荐一个根节点的最低层次为1从根到该节点所经分支上的所有节点(根节点是所有节点的祖先)二叉树(它的子节点可以理解为计划生育)二叉树不存在度大于2的节点每一层都是满的假如有h层 ,前h-1层都是满的,最后一层要求从左到右是连续的。
2025-02-06 20:41:56
395
9
原创 新手关于学习c语言队列与栈有感
假设我们是我们有5个数据都是以上图的形式储存在栈与队列中,那么,先出的是栈顶的元素即5;,先出的栈底的元素即1。了解完这些我们就可以来了解栈与队列的代码构成。
2025-01-03 15:27:21
577
8
原创 编译和链接
在ANSI C的任何一种实现中,存在两个不同的环境第一种是翻译环境,在这个环境源代码被替换为可执行的机器指令(二进制指令)第一种是翻译环境,它用于实际执行代码。
2024-09-28 10:53:04
302
3
原创 新手关于学习C语言文件和文件操作的有感
1.文件的打开和关闭 fopen fclose2. 流和标准流 :流就是不同设备上的数据内容3.操作过程 :打开流 读取流 关闭流4.文件指针 FILE*的文件指针5.其中r是read的缩写。其中w是write的缩写6."r"错误运行会报错 "w"报错会新建文件夹 如果成功的话会清空文件再添加内容7."wb" "rb"就是 读写二进制得内容8.free(地址名),就是释放内存,防止内存泄漏。
2024-09-22 08:37:40
668
2
原创 整型/浮点型数据在内存中的存储
当E的2进制代码位全1时,则表示该数位+无穷或者-无穷,你想想E代表为2的负E次方,如果此时二进制代码内容为全0,说明在32位下时为128,在64位下时为1024,如此大的负次方乘以任何数会变得非常大,所以为+无穷或者-无穷;当E的2进制代码位全0时,则表示该数位+0或者-0,你想想E代表为2的负E次方,如果此时二进制代码内容为全0,说明在32位下时-127,在64位下时-1023,如此大的负次方乘以任何数会变得非常小,所以为+0或者-0;10进制位下的5.5 它的S=1,M=1.011,E=2。
2024-09-09 22:33:45
403
2
原创 模拟实现strlen strcpy strcat strcmp strncpy strncat strstr memcpy memmove
3.strlen类型3。
2024-09-08 21:22:46
243
2
原创 c语言指针及额外知识总结
例如 const int const * const p,被const 修饰的指针变量就是常变量,简单的讲,讲const 放在*左边就会限制*p ,就是说*p的内容不可以修改,而如果在*的右边,就会限制p,我们知道,p是地址,所以p的地址不能被修改,p是指针变量,这个变量是用来存放指针(地址)的,int * 是指针的类型, p是指针的名字,*p就是地址存放的内容:p就是地址,*是解引用,*p是把这个地址的内容读取出来。qsort是c语言中的一个库函数,这个函数是对数据排序,对任意类型的数据都能排序。
2024-09-05 17:24:33
856
3
原创 关于利用二维数组之前的只是建立简易扫雷代码的实践与心得
一 为了简化代码,我们会建立起两个.c文件,以及一个自定义的库函数二首先我们的目标是建立起一个9*9的表格,但是为了避免计算边界越界的问题,我们要通过建立11*11的表格来避免越界问题。
2024-04-27 15:12:26
670
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人