- 博客(42)
- 收藏
- 关注
原创 掌握Linux项目自动化构建:从零入门make与Makefile
不会写Makefile的程序员,就像不会用筷子的美食家——永远尝不到工程化开发的精髓。在Windows环境下我们习惯使用Visual Studio等IDE的一键编译,但在Linux开发环境中,掌握Makefile就像获得了一把打开高效开发之门的钥匙。实现真正的自动化编译- 一个命令完成整个项目的构建提升编译效率- 只重新编译修改过的文件管理复杂项目- 轻松处理多文件、多目录的依赖关系跨平台移植- 一套构建规则适应不同开发环境在Linux开发中,make是一个智能编译命令,而Makefile是它的。
2025-03-26 22:10:28
1587
4
原创 Linux编译器gcc/g++使用完全指南:从编译原理到动静态链接
掌握gcc/g++的编译原理和使用技巧,是成为Linux开发高手的必经之路。希望本文能帮助您系统理解编译过程,在实际开发中游刃有余!💡 思考题:为什么说"编译器也是软件"?因为编译器本身就是用其他语言编写的程序,可以通过迭代不断升级。📌 注意:虽然g++可以编译C代码,但建议严格区分使用,避免潜在的兼容性问题。
2025-03-26 11:03:12
917
14
原创 Linux软件包管理与Vim编辑器指南
在Linux下安装软件,一种常见的方法是下载程序的源代码,并进行编译,得到可执行程序。然而,这种方法既耗时又繁琐。为了方便,人们将一些常用的软件提前编译好,做成软件包,存放在服务器上。通过包管理器,用户可以方便地获取这些编译好的软件包,直接进行安装。软件包管理:Linux下使用yum可以方便地管理软件包,包括安装、卸载和更新。Vim编辑器:Vim是一个强大的文本编辑器,掌握其基本操作和配置可以大大提高编辑效率。
2025-03-12 15:49:08
1162
17
原创 Linux必备技能:打包压缩与权限管理详解
掌握打包压缩和权限管理是Linux使用的核心技能。通过合理压缩文件提升效率,深入理解权限机制保障系统安全。实践过程中,善用热键和工具(如。打包压缩是通过特定算法将多个文件合并或压缩,减少体积的技术。打包后的文件不仅体积更小,还能作为一个整体传输,提升效率。),并灵活调整权限设置,能让你的Linux之旅更加顺畅!:创建一个共享目录,设置粘滞位,体验权限控制的魅力吧!
2025-03-08 16:10:05
1062
13
原创 Linux入门必备:基础指令详解
掌握这些基础指令后,你已能高效操作Linux系统。建议多实践以巩固记忆,后续可深入学习Shell脚本编写和权限管理等进阶内容。掌握Linux命令行操作是开发者、运维人员的基本技能。本文整理常用Linux指令及使用场景,助你快速上手。删除空目录(仅当目录无内容时生效)误删可能导致数据丢失。显示当前所在目录的绝对路径。创建空文件或更新文件时间戳。移动文件/目录 或 重命名。以树状结构显示目录内容。按名称/类型查找文件。
2025-03-03 00:37:55
1235
14
原创 Linux的诞生:一场自由与协作的技术革命
在今天的互联网世界,Linux几乎无处不在——从智能手机(Android内核)到超级计算机,从云计算平台到家用路由器,它的身影渗透在技术的各个角落。但这样一个改变世界的操作系统,并非诞生于某家商业巨头的实验室,而是一个芬兰大学生“为了好玩”发起的个人项目。1970年代,贝尔实验室开发的Unix系统凭借其简洁的设计和强大的多用户能力,成为学术界和企业的宠儿。(GNU’s Not Unix),旨在创建一个完全自由的操作系统,但直到1990年,GNU仍缺少一个关键组件——内核(即操作系统的核心)。
2025-02-28 00:40:56
1098
10
原创 模拟算法习题篇
在算法中,是一种通过计算机程序来模拟现实世界中的过程或系统行为的方法。它的以下是一个简单的模拟算法题目及其解题思路: 题目:一只长度不计的蠕虫位于n英寸深的井的底部。它每次向上爬u英寸,但休息时会滑落d英寸。求蠕虫爬出井口需要的最少爬行次数。通过上述步骤和示例,可以看到模拟算法的核心在于“”,按照题目要求逐步实现。
2025-01-22 23:08:12
1153
13
原创 前缀和算法习题篇(下)
设[0,x-1]区间内所有元素之和等于a,[0,i]区间内所有元素的和等于b,可得(b-a)%k==0。想知道最大的以i为结尾的和为0的子数组,就要找到从左往右第一个x1使得[x1,i]区间内的所有元素的和为0。于是问题就变成:找到在[0,i-1]区间内,有多少前缀和的余数等于sum[i]%k的即可。设i为数组中的任意位置,用sum[i]表示[0,i]区间内所有元素的和。
2025-01-19 18:11:09
991
10
原创 【C++进阶篇】——string类的使用
是 C++ 标准库的一部分,但它不是 STL 容器的一部分。STL 容器是指那些基于模板的容器,如std::list等。提供了类似于 STL 容器的功能,比如动态内存管理、迭代器支持等,但它的设计和实现是独立的。被归为 STL 是因为它具有类似于 STL 容器的特性和功能,尽管它在技术上并不属于 STL。这种归类更多是出于功能和使用上的相似性,而不是严格的分类。是 C++ 标准库中的一个类,它提供了一种方便的方式来创建、操作和处理字符串。
2024-11-17 02:10:07
1668
32
原创 前缀和算法习题篇(上)
举例:当访问的区间是[0,2]时,区间内所有元素的和为dp[2]-dp[-1],这里的dp[-1]越界。而当访问的区间是[1,2]时,区间内所有元素的和为dp[2]-dp[0],使dp[0]=0即可,不会越界。最后,本篇文章到此结束,感觉不错的友友们可以一键三连支持一下笔者,有任何问题欢迎在评论区留言哦~快速是指O(1),前缀和思想可把时间复杂度可降到O(q)。时间复杂度是O(n* m *q),会超时。时间复杂度为O(m*n)+O(q).时间复杂度是O(n*q),会超时。时间复杂度为O(q)+O(n).
2024-11-13 23:26:04
1208
17
原创 AI大模型:重塑软件开发流程的优势、挑战及应对策略
随着人工智能技术的飞速发展,AI大模型正在深刻影响着软件开发的各个环节。本文将详细分析AI在软件开发流程中带来的优势,面临的挑战,以及开发者的应对策略。
2024-11-12 12:50:06
555
4
原创 多模态AI:开启人工智能的新纪元
多模态AI是指人工智能系统能够理解和处理多种不同类型数据输入的能力。这些数据类型包括文本、图像、声音、视频等。简单来说,多模态AI能够接收多种数据类型,并输出多种类型的信息。与单模态AI相比,后者只能处理单一类型的数据输入和输出。多模态AI技术的发展不仅拓展了AI的应用范围,更重要的是,它模糊了人类感知与AI理解之间的界限。这种趋势可能导致人机交互方式的根本性转变,使AI成为人类认知的无缝延伸,而非单纯的工具。随着多模态AI技术的不断进步,我们有理由相信,它将为人类社会带来更多的便利和创新。
2024-11-11 23:38:51
962
4
原创 “容器的舞步:如何用范围for循环优雅地遍历”
范围for循环是一种特殊的for循环,它允许我们直接遍历一个集合中的所有元素,而不需要手动管理循环的索引或迭代器。这种循环的语法非常简单,由两部分组成,中间用冒号“:”分隔。第一部分是用于迭代的变量,第二部分是被迭代的范围。
2024-11-11 11:33:51
787
6
原创 智能的编织:C++中auto的编织艺术
auto关键字在C++11中提供了一种方便的方式来声明变量,让编译器自动推断变量的类型。这不仅简化了代码,也减少了因类型错误而导致的编译错误。但是,使用auto时也需要小心,特别是在声明指针、引用和数组时,以及在函数参数和返回值中使用时,要确保类型的正确性和代码的清晰性。最后,本篇文章到此结束,感觉不错的友友们可以一键三连支持一下笔者,有任何问题欢迎在评论区留言哦~
2024-11-10 22:01:49
582
15
原创 滑动窗口习题篇(下)
当动态哈希表中包含目标串中所有的字符,并且对应的个数都不小于目标串的哈希表中各个字符的个数,那么当前的窗口就是一种可行的方案。我们可以使用两个哈希表,其中一个将目标串的信息统计起来,另一个哈希表动态的维护窗口内字符串的信息。根据题目描述,我们可以把问题转化:找出一个最长的子数组的长度,子数组中不超过两种类型的水果。不同在于之前处理的对象是一个一个的字符,我们这里处理的对象是一个一个的单词。 输入:fruits = [3,3,3,1,2,1,1,2,3,3,4]的子串,返回这些子串的起始索引。
2024-11-10 16:32:29
679
1
原创 “穿梭于容器之间:C++ STL迭代器的艺术之旅”
迭代器是C++ STL中非常重要的概念,它提供了一种统一的方式来访问和操作容器中的元素。通过合理使用迭代器,开发者可以编写出更加通用、高效、安全的代码。希望这篇博文能帮助你更好地理解和使用迭代器。如果你有任何问题或想法,欢迎在评论区与我交流!
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0〜n-1之内。在范围0〜n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。在这里,二分查找算法在这告一段落,后续会给友友们带来更多的算法解题,感觉不错的友友们可以一键三连支持一下笔者,有任何问题欢迎在评论区留言哦~根据峰顶值的特点(比两侧元素都要大),遍历数组内的每一个元素,找到一个比左右两边元素都大的元素即可。 输入: [0,1,2,3,4,5,6,7,9]在这幅图中,C点即数组中我们所求的最小元素。
2024-11-08 23:55:38
961
18
原创 二分查找习题篇(上)
给定⼀个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。这里,我们把数组的元素分为两部分——小于等于target的部分[left,Bright] and 大于target的部分[Bright+1,right]。这里,我们把数组的元素分为两部分——平方后小于等于x的部分[1,mid] and 平方后大于x的部分[mid-1, x]和一个目标值,在数组中找到目标值,并返回其索引;
2024-11-07 23:24:07
1095
19
原创 滑动窗口习题篇(上)
什么是滑动窗口——同向双指针什么时候用滑动窗口——利用单调性滑动窗口的正确性——利用单调性,规避了很多没有必要的枚举行为滑动窗口的时间复杂度——O(N)用滑动窗口如何书写代码,下列例题示范。
2024-11-03 23:40:13
1579
15
原创 双指针习题篇(下)
最后,本篇文章在此结束,我们了解到双指针法的核心在于通过两个指针的相对移动来减少不必要的遍历,从而提高算法的效率。的数组和一个数字 s ,在数组中查找两个数,使得它们的和正好是 s。在 b 的后面区间内,利用“双指针”找到两个数,使这两个数的和等于 target - a - b即可。在 a 的后面区间内,利用「三数之和」找到三个数,使这三个数的和等于 target - a 即可。3.在该数后面的区间内,利用“双指针算法”快速找到两个数,它们的和等于 -a即可。
2024-11-01 23:56:43
1240
14
原创 双指针习题篇(上)
给定⼀个数组nums,编写⼀个函数。请注意 ,必须在。⽰例 1: 输⼊:nums 输出: [1,3,12,0,0]⽰例 2:nums= [0] 输出: [0]
2024-10-31 23:55:56
717
12
原创 【C++进阶篇】——STL的简介
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。最后,本篇文章到此结束,感觉不错的友友们可以一键三连支持一下笔者,有任何问题欢迎在评论区留言哦~
2024-10-26 20:55:18
734
13
原创 【C++干货篇】——模版初阶
class 类模板名// 类内成员定义// 类模版public:_size = 0;//模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误//声明和定义分离的写法// 扩容++_size;int main()//显示实例化// int// doublereturn 0;
2024-10-26 20:17:10
1140
6
原创 【C++干货篇】——C/C++内存管理
malloc:分配未初始化内存。calloc:分配并初始化为零的内存。realloc:改变已有内存块的大小,并可能移动内存块。使用这些函数时,记得调用free来释放不再需要的内存,以防止内存泄漏。int main()//只申请空间//申请空间+调用构造函数//没有默认构造可以自己传参//可以调用默认构造free(p1);//只释放空间//调用析构函数+释放空间delete p2;
2024-10-24 21:55:44
2579
15
原创 【C++干货篇】——类和对象的魅力(四)
将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后面。const实际修饰该成员函数隐含的this指针(this指向的对象),表明在该成员函数中不能对类的任何成员进行修改。const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const Date* const this
2024-10-22 23:48:13
2729
8
原创 【C++干货篇】——类和对象的魅力(三)
当运算符被⽤于类类型的对象时,C++语⾔允许我们通过运算符重载的形式指定新的含义。 C++规定类类型对象使用运算符时,必须转换成调用对应运算符重载, 若没有对应的运算符重载,则会编译报错。运算符重载是具有特殊名字的函数,他的名字是由operator和后⾯要定义的运算符共同构成。和其他函数⼀样,它也具有其返回类型和参数列表以及函数体。
2024-10-21 23:35:33
1292
6
原创 【C++干货篇】——类和对象的魅力(二)
如果类中没有申请资源时,析构函数可以不写,直接使⽤编译器⽣成的默认析构函数,如Date;如果默认⽣成的析构就可以⽤,也就不需要显⽰写析构,如MyQueue;但是有资源申请时,⼀定要⾃⼰写析构,否则会造成资源泄漏,如Stack。
2024-10-20 23:51:56
1525
11
原创 【C++干货篇】——类和对象的魅力(一)
class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。.为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例
2024-10-19 23:54:47
1160
10
原创 【C++基础篇】——逐步了解C++
本篇笔者将从C++的第一个程序开始讲解C++的知识点,请看笔者细细道来~1.定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。// 命名空间中可以定义变量/函数/类型int val;2.namespace本质是定义出⼀个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不再冲突了。
2024-10-18 23:39:16
1692
11
原创 【C++入门篇】——你了解多少C++?
1983年,Bjarne Stroustrup在C语⾔的基础上添加了面向对象编程的特性,设计出了C++语⾔的雏形 (C++兼容C语言),此时的C++已经有了类、封装、继承等核新概念,为后来的面向对象编程奠定了基础。这⼀年该语⾔被正式命名为C++。
2024-10-17 22:07:46
1014
10
原创 三路分化与文件归并排序
三路划分的核心思想有点类似hoare的左右指针和lomuto的前后指针的结合。核⼼思想是把数组中的数据分为三段【比key小的值】【跟key相等的值】【比key大的值】,所以叫做三路划分算法。
2024-10-16 21:20:41
1122
12
原创 数据结构——排序(2)
前面已经介绍了直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序已经递归版本的快速排序,在本篇将接着介绍快速排序的非递归版本、归并排序以及计数排序。时间复杂度:O(nlogn)空间复杂度:O(n)计数排序在数据范围集中时,效率很⾼,但是适⽤范围及场景有限。时间复杂度:ONrange空间复杂度:Orange稳定性:稳定.
2024-10-15 21:35:53
1554
8
原创 数据结构——排序(1)
希尔排序法的基本思想是:先选定⼀个整数(通常是gap = n/3+1),把待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于直接插⼊排序。在希尔排序中,随着增量的减小,元素的移动次数会显著降低。因此,希尔排序在最初和最后的排序的次数都为n,即前⼀阶段排序次数是逐渐上升的状态,当到达某⼀顶点时,排序次数逐渐下降⾄n,⽽该顶点的计算暂时⽆法给出具体的计算过程。
2024-10-14 23:05:14
1009
4
原创 数据结构——二叉树(下)
/二叉树结点的结构int data;}BTNode;为了更好的理解二叉树,我们先来手动的创建一个链式二叉树");exit(1);⼆叉树分为空树和⾮空⼆叉树,⾮空⼆叉树由根结点、根结点的左⼦树、根结点的右⼦树组成的。根结点的左⼦树和右⼦树分别⼜是由⼦树结点、⼦树结点的左⼦树、⼦树结点的右⼦树组成的,因此⼆叉树定义是递归式的,后序链式二叉树的操作中基本都是按照该概念实现的。
2024-10-11 18:37:08
1202
5
原创 数据结构——二叉树(上)
也就是说,最后一层可能不是满的,但所有节点都必须从左到右填充。如果树的高度为 h,则总结点数在 2(h-1)到 2h−1 之间。
2024-10-08 02:26:07
1340
2
原创 数据结构——栈和队列
3.1初始化3.2销毁3.3入数据3.4出数据3.5取栈顶元素3.6获取栈中有效元素个数4.完整代码4.1.Stack.h4.2.Stack.c4.3.test.c二、队列1.概念队列:只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表。⼊队列:进⾏插⼊操作的⼀端称为队尾。出队列:进⾏删除操作的⼀端称为队头。队列的特点:队列中的数据元素遵守先进先出FIFO(First In First Out)的原则。
2024-10-05 23:52:24
897
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人