- 博客(42)
- 收藏
- 关注
原创 优选算法——双指针4(单调性)
脚长在自己身上,走不走,走哪条路,走什么样的路自己决定。做不做人,做什么样的人亦是如此。想走的路不好走,想做的人又不好做,都说是身不由己,这不是废话吗?已不由心,身又岂能由己?——张之为。
2026-01-27 09:09:10
757
24
原创 优选算法——双指针专题2(模拟)
所谓异地操作,就是创建一个新的数组来辅助复写零的操作。就拿题给示例来说:我们创建一个与原数组等长的辅助数组来存放复写的元素。首先,在数组长度固定的情况下,dest的写入是一定不会超过cur的,因为我们在遍历之前已经确定好了起始位置,即从最后一个被复写的元素开始向前遍历。cur和dest的运动逻辑是已经被确定好了的,命中注定了的其次我们将使用双指针算法来确定起始位置:逻辑:1.判断cur指向元素是否为02.移动dest,非零一位,零两位3.判断dest是否结束4.cur- -
2026-01-25 08:21:46
1085
11
原创 优选算法——双指针1(数组分块)
定义双指针,将数组分块上图是算法执行过程中的分组状态,dest初始值是-1,cur初始值是0,意思是刚开始,还没有元素被处理过,两个已处理的区间都不存在,大家把dest写成0,那就是已处理非0区间长度为0,已处理0区间不存在,也可以的,不过后续遍历时的操作可能略有不同,思路都是一样的。
2026-01-24 08:10:18
521
21
原创 算法日迹——简介:梦开始的地方(必看)
《近津薪荼的算法日迹》专栏开篇,面向算法竞赛爱好者、技术求职者、计算机从业者及嵌入式开发者,提供系统化的算法训练。专栏采用日更模式,涵盖双指针、搜索、动态规划等核心算法,每期包含知识点导图、题目解析、解题思路及下期预告。建议新手每日消化前一期内容,有基础者可提前尝试下期题目。通过专题化编排和渐进难度设计,帮助读者提升算法能力,欢迎在评论区打卡交流。首道算法题解析将于次日发布。
2026-01-23 08:58:56
653
2
原创 Linux 操作系统基础指令详解(一)
本文系统介绍了Linux操作系统的基础文件操作指令及其核心概念。重点讲解了`ls`、`cd`、`touch`、`mkdir`、`rm`等常用指令的功能和使用选项,并深入阐释了Linux文件管理的树形结构本质。文章强调理解“文件=内容+属性”这一基础理念,区分了绝对路径与相对路径的差异,解释了隐藏文件`.`和`..`的实际作用。同时揭示了家目录、路径分隔符、文件后缀在Linux中的特殊处理方式。通过指令演示与原理结合的方式,为初学者构建了从操作到理解的系统性认知框架。
2025-12-09 17:00:17
1446
46
原创 C++ vector容器底层深度剖析与模拟实现
C++ vector基于动态数组实现,通过三个指针管理内存。核心风险是迭代器失效:insert可能扩容使所有迭代器失效;erase使被删位置后迭代器失效,必须通过it=erase(it)接收返回值。采用2倍扩容策略,现代写法通过swap实现安全拷贝。连续存储支持高效随机访问,但需警惕迭代器失效这一主要陷阱。
2025-11-22 09:35:21
1548
50
原创 C++ vector容器详解:接口使用与底层原理初探
本文详解C++的vector容器:本质是顺序表即数组,核心讲接口使用与扩容等关键知识。构造方式含默认、填充、区间、拷贝及initializer_list(支持{ }直接初始化),附打印函数与调试示例。扩容用reserve(仅扩容)和resize(扩容+初始化),自动扩容通常1.5倍,手动扩容更高效。还涉及元素访问、插入删除,对比emplace_back与push_back差异,后者需实例化对象,前者可直接传参构造。
2025-11-18 22:09:27
802
30
原创 手撕容器string(了解底层)2
本文是字符串类实现的后半部分,重点介绍了插入、删除、查找等核心功能的实现细节。通过指定位置插入字符串时处理容量不足和内存挪动,删除操作区分全删与部分删除的情况。查找功能支持字符和子串定位,拷贝构造与赋值操作确保深拷贝正确性。关系运算符重载基于strcmp实现字符串比较,输入输出运算符重载则通过缓冲机制高效处理流数据。整体实现了标准字符串类的关键功能。
2025-11-08 22:11:27
320
19
原创 手撕容器string(了解底层) 1
在C++中实现自定义string类深入体现了动态内存管理与面向对象编程的核心思想。通过封装char*指针及size、capacity成员,构建了字符串的完整功能体系。关键技术包括:构造函数处理空字符串初始化;运算符重载和迭代器提供遍历支持;reserve扩容采用成倍增长策略;插入操作需严格边界检查,特别注意size_t无符号特性风险。实现过程涵盖了const成员函数重载、深浅拷贝等关键概念,展现了C++资源管理机制,为理解标准库容器设计奠定基础。
2025-11-04 21:30:56
823
9
原创 String operations 字符操作相关接口详解
首先,c_str方法用于将C++字符串转换为C风格字符串(以'\0'结尾),便于与C语言接口(如fopen)兼容。其次,get_allocator涉及STL内存池机制,日常使用较少关注。copy方法用于字符串拷贝但不会自动添加'\0',而substr则更常用,能直接返回一个新的字符串对象。博客重点解析了查找相关接口:find要求完全匹配子串,find_first_of查找首次出现在指定字符集中的字符,find_first_not_of则查找未出现在字符集中的字符,并提供了相应的反向查找版本(如rfind)
2025-10-08 15:50:30
532
9
原创 c++详解系列(拷贝构造函数)
拷贝构造函数摘要拷贝构造函数是C++中一种特殊的构造函数,用于创建一个对象的副本。其主要特点包括:1. 拷贝构造函数是构造函数的重载形式,其第一个参数必须是当前类类型的引用(通常加const修饰),其他参数都有默认值。若使用传值参数会导致无限递归调用。2. C++规定类对象进行拷贝行为(如传值传参、传值返回等)时必须调用拷贝构造函数。3. 若未定义拷贝构造函数,编译器会自动生成一个,对内置类型进行浅拷贝,对自定义类型成员调用其自身的拷贝构造。4. 对于含有指向动态分配资源的成员或需要深拷
2025-08-09 09:43:53
308
6
原创 c++详解(构造函数与析构函数)
构造函数和析构函数是C++中两种重要的默认成员函数。构造函数用于对象初始化,特点是:与类同名、无返回值、自动调用、可重载。编译器会生成默认构造函数,但对内置类型不初始化,对自定义类型会调用其构造函数。析构函数(~类名)用于资源清理,特点是:无参无返、自动调用、唯一性。编译器生成的析构函数对内置类型不做处理,但总会调用自定义类型成员的析构函数。对象析构顺序遵循"后定义先析构"原则。当类涉及资源分配时,必须自定义析构函数以避免内存泄漏,否则可使用编译器默认版本。
2025-08-07 19:56:28
501
3
原创 c++详解系列(类的定义,实例化,this是指针)
C++中的类是结构体的升级,支持成员变量(属性)和成员函数(方法),通过`class`或`struct`定义。类通过**访问限定符**(public/private/protected)实现封装,控制成员的对外可见性。类域限定成员归属,类外定义需用`: :`指明。 实例化是将类转为物理对象的过程,成员变量此时才分配内存。对象大小仅含成员变量(内存对齐),成员函数存于代码段,由所有对象共享。 this指针是编译器隐式添加的形参,指向调用该函数的对象,用于区分不同对象的成员。函数内可显式使用`thi
2025-08-06 15:08:34
719
7
原创 c++详解(宏与内联函数,nullptr)
本文介绍了C++中宏的替代方案及其优缺点,重点讨论了内联函数(inline)和nullptr的应用。宏在C++中虽仍可使用,但存在副作用和调试困难等问题,建议用const/enum替代宏常量,用inline替代宏函数。内联函数在编译时展开,避免函数调用开销,但不适用于复杂或递归函数,且声明与定义需在同一文件以避免链接错误。此外,宏的优点在于节省空间和提升效率,但过度使用会导致代码膨胀。最后,文章指出C++11引入的nullptr解决了NULL在类型推导中的二义性问题,能明确表示空指针,提升代码安全性。
2025-08-01 21:10:53
1200
3
原创 c++详解系列(引用&指针)
# 引用与指针总结引用是变量的别名,与被引用变量共享内存空间,定义时必须初始化且不可更改引用对象。引用主要用于传参和返回值,能减少拷贝提高效率。const引用可以限制访问权限,避免权限放大问题。引用相比指针更安全直接,但功能有限。指针是存储地址的变量,需要独立内存空间,可改变指向对象,功能更灵活但风险更高。引用和指针各有优势:引用更安全简洁,指针更灵活强大,二者互补共存于C++中,无法完全替代对方。在不需要改变指向或需要更安全访问时优先使用引用,需要灵活操作内存时仍需使用指针。
2025-07-31 12:07:23
795
2
原创 c++详解系列(缺省参数与函数重载)
摘要本文介绍了C++中两个重要的函数特性:缺省参数和函数重载。缺省参数定义:在函数声明或定义时为参数指定默认值作用:调用函数时若无对应实参则使用默认值,增强函数实用性分类: 分类 :全缺省:所有参数都有默认值部分缺省:部分参数有默认值(必须从右向左连续缺省)注意事项:声明和定义分离时,缺省参数只能在声明中指定函数重载定义:同一作用域中函数名相同但参数不同的多个函数要求:参数类型不同参数个数不同参数顺序不同注意事项:返回值不同不能作为重载条件无参
2025-07-29 15:27:08
1127
2
原创 深入解读c++(命名空间)
C++ 中的命名空间本质是一种独立的作用域,与局部域、全局域和类域共同构成了 C++ 的域体系。它的核心价值在于解决命名冲突问题 —— 不同域中可以定义相同名称的变量、函数或结构体,通过域作用限定符::实现精准访问。命名空间支持嵌套定义,可在不同文件中声明同名命名空间(会被编译器合并),且不影响成员的生命周期。使用方式包括:指定命名空间访问(推荐项目使用)、using 声明展开特定成员、using 指令展开全部成员(不推荐,有冲突风险)。命名空间为大型项目的模块化开发和团队协作提供了便利,既能简化函
2025-07-29 10:43:01
408
2
原创 初学者对编译和链接的学习笔记(含预编译详解)
c中有一些可以直接使用的预定义符号(它们是在预编译阶段被处理的)__FILE__//进⾏编译的源⽂件__LINE__//⽂件当前的⾏号__DATE__//⽂件被编译的⽇期__TIME__//⽂件被编译的时间__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义例define例#define reg register //为 register这个关键字,创建⼀个简短的名字。
2025-07-10 20:15:19
752
7
原创 初学者对动态内存管理的学习笔记
在学动态内存以前,我们已知的开辟内存的方式都是从栈区开辟空间(函数形参,返回值,局部变量等),由系统自动开辟。开辟的空间大小固定。对于数组,必须指定长度且无法调整数组长度。上述开辟空间的方法不够灵活c语言引入动态内存开辟,让程序员自己来申请和释放空间,增加灵活性2.malloc与free2.1malloc:动态内存开辟的函数。
2025-07-07 15:50:00
745
2
原创 初学者关于联合和枚举的学习笔记
当我们需要描述几件有共同属性的事务的信息时,可以考虑使用联合体来节省空间。综上可知,联合体中的成员不可同时使用,因为是同一块内存,内容会覆盖。存在空间浪费,如图书就不需要design,colors,sizes。每⼀种商品都有:库存量、价格、商品类型和商品类型相关的。不是最大对齐度的整数倍,就要对齐到最大对齐数的整数倍。定义的符号(将它替换成对应的常数值,没法监视){ }中的内容是枚举类型的可能取值,也叫。的,枚举声明在函数内,只能在函数内使⽤。有三种商品:图书、杯⼦、衬衫。开始,依次递增,也可以。
2025-07-07 10:31:30
462
2
原创 初学者关于数据在内存中的储存的笔记
但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是。型(要看 具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤于⼀个字节,那么必然存在着⼀个。对于32位的浮点数(float),最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字。对于64位的浮点数(double),最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效。
2025-07-05 15:02:16
1077
3
原创 初学者关于c语言的内存函数的笔记
比较结果 >0,前者大 <0:后者大=0 :一样大。和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是。函数是⽤来设置内存块的内容的,将内存中指定⻓度的空间设置为。⽐较从ptr1和ptr2指针指向的位置开始,向后的num个。比较的时候,内存中的内容被转化成。memmove的使⽤需要包含。memmove函数也是完成。的数据进⾏设置,也就是说以。
2025-07-03 23:09:32
510
3
原创 初学者关于字符函数和字符串函数的笔记(1)
作用:字符分类头文件:ctype.h例子intislowerintc );这里参数为什么不是字符型而是整型?
2025-07-03 12:28:19
741
原创 初学者关于指针的学习笔记(6)
要分析上述sizeof的操作数类型,需知道数组名的含义,判断操作数实质是元素地址,还是数组地址,是元素还是数组。的不同,32位地址的大小为4个字节,64位则8个字节)等。返回值类型为size_t,参数类型是字符类型指针。的字符个数,没有\0可能会造成越界查找。有事需借助操作符的优先级来判断。用来计算操作数在内存空间中占。真的执行,通过表达式的。strlen统计的是。
2025-07-01 23:23:03
138
1
原创 初学者关于指针的学习笔记(5)
一个函数的指针被当做参数传给另一个函数,当这个指针被用来调用其所指向的函数的时候,被调用函数就是回调函数。回调函数不是不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另一方调用的,用于对该事件或条件进行响应。我们对上一期的代码进行回调函数改造。
2025-06-30 22:07:26
562
11
原创 初学者关于指针的学习笔记(4)
上述代码中,我们发现case中除了函数调用,其余语句都是相同的,那么我们就要考虑,能不能有一种方法,把上述重复语句只写一次,在该调用函数的时候调用相应函数,这样就能提高代码效率。解析:这是一个函数的声明,函数类型是void int *,函数名称是signal,由两个参数,类型分别是int,void(*)(int)。我们可以把二维数组看成是以数组为元素的一维数组,数组名为首元素的地址,即第一个数组的地址。p2,由于加括号,改变优先级先和*组成*p2,说明p2是一个指针,指向的是一个大小为10的整型数组。
2025-06-30 20:40:35
686
原创 初学者关于指针的学习笔记(3)
本文主要探讨了C语言中数组和指针的关键知识点:1.数组名的理解,指出除sizeof和&操作外,数组名都表示首元素地址;2.指针访问数组的方法及等价形式;3.一维数组传参的本质是传递首元素地址;4.冒泡排序的实现及优化;5.二级指针的概念;6.指针数组的定义;7.用指针数组模拟二维数组的方法。文章通过代码示例详细说明了数组与指针的关系及操作技巧,为理解C语言的底层机制提供了实用指导。
2025-06-30 00:22:39
265
原创 初学者关于指针的学习笔记(2)
防止程序运行之后,指针瞎指,导致程序出错,置0就像把这只“野狗”栓在0处,防止它乱跑;中写⼊⼀条错误信息,显⽰没有通过的表达式,以及包含这个表达式的⽂件名和⾏号。则相反,被指向的内容可以通过指针来改变,但是指针变量本身的内容无法改变。,指针变量本身可以改变,但是被指向的内容不能像上边那样通过指针来改变。使用指针来解决,指针的是指向是实参的内存空间,通过调用指针可以从本质上。,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报。的缺点是,因为引⼊了额外的检查,增加了程序的运⾏时间。
2025-06-29 20:40:47
541
1
原创 初学者的指针学习笔记(1)
像学生宿舍一样,被分成许多个房间,每个房间都有自己的房号,每个房间能住8个学生内存被分成许多个单元(小为1Byte),每个单元都有自己的编号,每个单元里能住8个小比特(bite)c语言中,,我们可以通过指针快速找到我们要访问的内存。
2025-06-29 09:40:58
840
原创 初学者对函数的理解
返回值类型 名ret_type fun_name(形参)函数体声明:告诉编译器,有一个函数名字是什么,参数是什么,是什么返回类型函数的调用一定要满足先声明,后使用,函数的定义是一种特殊的声明。
2025-04-26 20:53:47
775
3
原创 对c语言数据类型和变量的理解
译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型,其余参数就是存放⽤⼾输⼊的变量,格式字符串⾥⾯有多少个占位符,就有多少个变量。原因就在于 C 语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。如果不满5位,对应的值的前⾯会添加空格。都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫。7.单目操作符(只有一个操作数):++,--,+(正号)-(负号)除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
2025-04-03 15:24:23
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅