<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SixLegs的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SixLegs</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SixLegs]]></copyright><item><title><![CDATA[CMake 快速上手：从零开始真正读懂现代 CMake]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/165357796</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/165357796</guid><author>SixLegs</author><pubDate>Mon, 14 Sep 2026 21:25:42 +0800</pubDate><description><![CDATA[本文系统讲解CMake入门核心概念，从最小项目出发，按“构建系统生成器”逻辑逐步解析CMakeLists.txt的每一行：从cmake_minimum_required、project到add_executable与Target，掌握变量、列表、条件判断、构建选项及依赖管理。重点阐明现代CMake以Target为中心的设计思想，通过target_include_directories、target_link_libraries实现精准依赖传播，并结合多目录项目、第三方库（如Qt6）与模块化组织，帮助初学者理]]></description><category></category></item><item><title><![CDATA[二分查找详解：从普通二分到左右边界]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/161752092</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/161752092</guid><author>SixLegs</author><pubDate>Sat, 06 Jun 2026 19:44:36 +0800</pubDate><description><![CDATA[本文系统讲解了二分查找算法，重点分析了普通二分、左边界二分和右边界二分的实现逻辑与代码模板。主要内容包括：1. 普通二分查找的基本原理和代码实现，用于判断目标值是否存在；2. 左边界二分通过偏左中点查找第一个≥target的位置，适用于寻找重复元素的起始位置；3. 右边界二分通过偏右中点查找最后一个≤target的位置，适用于寻找重复元素的结束位置；4. 详细解释了mid计算方式的选择原因，避免死循环；5. 分析了二分查找的时间复杂度为O(logn)，空间复杂度为O(1)；6. 总结了三种二分模板的关键区别]]></description><category></category></item><item><title><![CDATA[Linux 下 gcc / g++ 编译过程详解：从编译到链接]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/161721743</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/161721743</guid><author>SixLegs</author><pubDate>Fri, 05 Jun 2026 15:19:49 +0800</pubDate><description><![CDATA[o# 编译 C 程序，默认生成 a.outgcc main.c# 运行默认生成的程序./a.out# 指定输出文件名# 运行指定名称的程序./main# 开启常见警告# 开启更多警告# 生成调试版本# 生成优化版本# 指定 C 标准# 只预处理# 只生成汇编# 只生成目标文件# 根据目标文件链接生成可执行文件# 多文件直接编译# 多文件分步编译# 指定头文件路径# 指定库路径并链接库# 链接数学库# 编译 C++ 程序，默认生成 a.out。]]></description><category></category></item><item><title><![CDATA[结构体与联合：内存对齐与位段解析]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/150142765</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/150142765</guid><author>SixLegs</author><pubDate>Mon, 11 Aug 2025 18:43:45 +0800</pubDate><description><![CDATA[本文系统介绍了C语言中的结构体、位段、枚举和联合四种自定义数据类型。重点讲解了结构体的声明、内存对齐规则及其性能优化技巧，位段的特殊用法和跨平台问题，枚举的定义及优势，以及联合的共用内存特性及其应用场景（如判断机器大小端）。同时指出位段因平台差异性应谨慎使用，而结构体传参推荐使用指针以提高效率。这些自定义类型为C语言提供了更灵活的数据组织方式。]]></description><category></category></item><item><title><![CDATA[C语言库中的字符函数]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/150056762</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/150056762</guid><author>SixLegs</author><pubDate>Sat, 09 Aug 2025 10:56:39 +0800</pubDate><description><![CDATA[本文介绍了C语言中常用的字符串处理函数，包括求字符串长度的strlen、字符串拷贝的strcpy/strncpy、字符串拼接的strcat/strncat、字符串比较的strcmp/strncmp、查找子字符串的strstr、分割字符串的strtok等。详细讲解了每个函数的功能特点、参数说明、使用注意事项，并通过具体代码示例演示其用法。此外，还介绍了错误信息处理函数strerror和字符分类转换函数，为字符串操作提供了全面的参考指南。]]></description><category></category></item><item><title><![CDATA[数组指针-函数指针-回调函数]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/149979528</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/149979528</guid><author>SixLegs</author><pubDate>Thu, 07 Aug 2025 20:58:17 +0800</pubDate><description><![CDATA[内存会划分为一个个的内存单元，每个内存单元都有一个独立的编号 - 编号也称为地址。地址在C语言中也被称为指针。指针（地址）需要存储起来 - 存储到变量中，这个变量也就被称为指针变量。指针的大小根据32位平台或64位平台固定是4/8个字节。地址是物理的电线上产生。32位机器 - 32根地址线 - 1/032个0/1组成的二进制序列，把这个二进制序列就作为地址，32个bit位才能存储这个地址，也就是需要4个字节才能存储。所以指针变量的大小就是4个字节。]]></description><category></category></item><item><title><![CDATA[常见类型在内存中的存储]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/149945113</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/149945113</guid><author>SixLegs</author><pubDate>Wed, 06 Aug 2025 18:58:32 +0800</pubDate><description><![CDATA[本文系统介绍了三种常见数据类型在内存中的存储方式。对于整型数据，详细解释了原码、反码和补码的转换关系，说明计算机采用补码存储的原因；字符型数据则以ASCII编码值直接存储；浮点型数据采用IEEE 754标准，通过符号位S、尾数M和指数E三部分进行存储。文章还通过具体示例分析了VS2022中整型和浮点型数据的实际存储情况，并解释了大小端存储模式的区别及其判断方法。]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——二叉树（1）]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135573912</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135573912</guid><author>SixLegs</author><pubDate>Thu, 19 Dec 2024 16:25:46 +0800</pubDate><description><![CDATA[树是一种的数据结构，它是由n（n>=0）个有限结点组成一个具有层次关系的集合。。它具有以下的特点：有一个特殊的结点，称为根结点，根结点没有前驱结点除根结点外，其余结点被分成M(M > 0)个互不相交的集合T1T2......Tm，其中每一个集合Ti (1 <= i <=m) 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱，可以有0个或多个后继树是递归定义的。]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——栈(Stack)和队列(Queue)]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135489394</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135489394</guid><author>SixLegs</author><pubDate>Sat, 13 Jan 2024 17:57:44 +0800</pubDate><description><![CDATA[逆波兰表示法（Reverse Polish notation，RPN，或逆波兰记法），是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式形式，在逆波兰记法中，所有操作符置于操作数的后面，因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。这是一个我们常见的表达式：9+(3-1)*3+8/2，这是一个中缀表达式，而我们要将它转换成一个不需要括号来识别优先级的后缀表达式，该怎么做？]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——链表（完）LinkedList]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135487010</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135487010</guid><author>SixLegs</author><pubDate>Tue, 09 Jan 2024 20:28:27 +0800</pubDate><description><![CDATA[双向链表由一系列的节点组成，每个节点包含两个指针，分别指向前一个节点和后一个节点。与单向链表不同，双向链表可以从任意节点开始，向前或向后遍历链表。如下图所示：这是一个无头双向链表，从中我们不难看出它与无头单向链表的区别：1.不仅有头节点通过next进行顺序访问，还有尾节点通过prev进行逆序访问2.额外有一个prev域访问上一个已访问过的节点LinkedList的官方文档。]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——链表（2）]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135442857</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135442857</guid><author>SixLegs</author><pubDate>Sun, 07 Jan 2024 21:00:23 +0800</pubDate><description><![CDATA[当慢指针刚进环时，可能就和快指针相遇了，最差情况下两个指针之间的距离刚好就是环的长度。此时，两个指针每移动一次，之间的距离就缩小一步，不会出现每次刚好是套圈的情况，因此：在慢指针走到一圈之前，快指针肯定是可以追上慢指针的，即相遇。通过以上过程我们推导出头节点距入口处（x）其实是等于快指针和慢指针相遇点到入口处的距离（y）的，所有我们大可在这里再次令slow等于head，让fast和slow以相同的速度往后走，因为速度一样，路程一样，所有它们再次相遇的地方就一定是这个环的入口点。下面是两个相交的链表。]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——链表（1）]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135393944</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135393944</guid><author>SixLegs</author><pubDate>Fri, 05 Jan 2024 17:57:18 +0800</pubDate><description><![CDATA[将head1.val与head2.val进行比较，较小令它等于tmpH且令它等于它的下一个节点，tmpH为newH的下一个节点。当fast==null或者fast.next === null时。然后令fast和slow一起走同样的步数，直到fast.next为null。要求倒数第k个节点，我们可以先定义fast和slow两个位于头节点的变量。当cur.val>=给定的值x时就让它进入链表2。当cur.val]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——ArrayList与顺序表]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135255677</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135255677</guid><author>SixLegs</author><pubDate>Fri, 29 Dec 2023 22:51:14 +0800</pubDate><description><![CDATA[【说明】是以泛型方式实现的，使用时必须要先实例化实现了接口，表明ArrayList支持随机访问实现了Cloneable接口，表明ArrayList是可以clone的实现了接口，表明ArrayList是支持序列化的5.和Vector不同，ArrayList不是线程安全的，在单线程下可以使用，在多线程中可以选择Vector或者CopyOnWriteArrayList底层是一段连续的空间，并且可以动态扩容，是一个动态类型的顺序表。]]></description><category></category></item><item><title><![CDATA[数据结构入门到入土——List的介绍]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/135255207</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/135255207</guid><author>SixLegs</author><pubDate>Wed, 27 Dec 2023 20:49:34 +0800</pubDate><description><![CDATA[List中提供了好的方法，具体如下：方法解释booleanadd(E e)尾插evoidadd将e插入到index位置booleanaddAll尾插c中的元素Eremove删除index位置元素booleanremove(Object o)删除遇到的第一个 oEget获取下标index位置元素Eset将index位置元素设置为elementvoidclear()清空booleancontains(Object o)判断o是否在线性表中intindexOf。]]></description><category></category></item><item><title><![CDATA[数据结构从入门到入土——初识泛型]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/134968281</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/134968281</guid><author>SixLegs</author><pubDate>Thu, 14 Dec 2023 21:59:55 +0800</pubDate><description><![CDATA[一般的类和方法，只能使用具体的类型要么是基本类型，要么是自定义的类。如果要编写可以应用于多种类型的代码，这种刻板的限制对代码的束缚就会很大。-----来源《Java编程思想》对泛型的介绍。泛型是在JDK1.5就是适用于许多许多类型。从代码上讲，就是对类型实现了参数化。三，引出泛型实现一个类，类中包含一个数组成员，使得数组中可以存放任何类型的数据，也可以根据成员方法返回数组中某个下标的值？]]></description><category></category></item><item><title><![CDATA[迈入数据结构殿堂——时间复杂度和空间复杂度]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/134956831</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/134956831</guid><author>SixLegs</author><pubDate>Wed, 13 Dec 2023 11:08:02 +0800</pubDate><description><![CDATA[一个算法执行所耗费的时间，从理论上说，是不能算出来的，只有你把你的程序放在机器上跑起来，才能知道。这里我们可以类比高数中极限的思维，当N趋近于无穷大的时候，后面的常量10加不加好像对我们的时间效率并没有太大的影响，因为如今计算机的运行效率都是相当快的。空间复杂度不是程序占用了多少bytes的空间，因为这个也没太大意义，所以空间复杂度算的是变量的个数。拿到一串代码计算基本操作被执行多少次时，我们不可能去挨个数，一小串代码还好，可当我们面对一个项目的代码时，我们是不可能去挨个数出来的。得到的结果 是大O阶。]]></description><category></category></item><item><title><![CDATA[学习数据结构第一步（必看）——初识集合框架]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/134946861</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/134946861</guid><author>SixLegs</author><pubDate>Tue, 12 Dec 2023 18:56:18 +0800</pubDate><description><![CDATA[一提及数据结构我们就会想到算法，那数据结构和算法有何关系？其实这两个玩意是相辅相成的，一个好的算法离不开好的数据结构，而我们学数据结构的目的就是为了能够体现在算法上，能够更好的应用。面对数据结构这个词，我们很容易误以为它是什么比较高大上的玩意儿，其实不然，我们可以简单理解成数据 + 结构，主要用来描述和组织数据。比如说，我们有十万个用户信息，那这些信息我们如何去描述和组织起来？答案就是使用数据结构这个东西。例如：数组就是一种简单的数据结构（数组也是用于描述和组织一组数据）]]></description><category></category></item><item><title><![CDATA[你是否认识异常？这些Java当中的你是否都了解？]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/134864961</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/134864961</guid><author>SixLegs</author><pubDate>Sun, 10 Dec 2023 10:14:28 +0800</pubDate><description><![CDATA[程序先执行 try 中的代码•如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.•如果找到匹配的异常类型, 就会执行 catch 中的代码•如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.•无论是否找到匹配的异常类型, fifinally 中的代码都会被执行到(在该方法结束之前执行).•如果上层调用者也没有处理的了异常, 就继续向上传递.•。]]></description><category></category></item><item><title><![CDATA[String类型详解（下），让你StringBuilder和StringBuffer不再迷路]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/134763263</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/134763263</guid><author>SixLegs</author><pubDate>Sun, 03 Dec 2023 17:26:58 +0800</pubDate><description><![CDATA[双引号引起来的值就存放在字符串常量池当中。如果有，就不存储，直接返回字符串常量池的对象即可。（字符串常量池底层是一个哈希表，叫做StringTable，是用c/c++编写的）]]></description><category></category></item><item><title><![CDATA[String类型详解（上），Java中String有多强大你真的了解吗？]]></title><link>https://blog.youkuaiyun.com/SixLegs/article/details/134756092</link><guid>https://blog.youkuaiyun.com/SixLegs/article/details/134756092</guid><author>SixLegs</author><pubDate>Sun, 03 Dec 2023 12:10:04 +0800</pubDate><description><![CDATA[在使用编程语言处理问题时往往会遇到与字符串相关的问题，当如果我们想定义一个字符串类型，这在C语言中其实是不存在的，得使用char*p来表示我们想要表达的字符串，但这其实是一个char*类型的指针。而在Java当中存在一个全新的数据类型——String类型：它可以直接定义我们想要表示的字符串。在IDEA上我们可以查看String的源码：（这里只截取了一部分）观察发现，这其实是一个类，而对类的学习，我们一定要从从它的构造方法开始学习。]]></description><category></category></item></channel></rss>