<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chh563的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chh563</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chh563]]></copyright><item><title><![CDATA[C++--stack和queue]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/162770998</link><guid>https://blog.youkuaiyun.com/chh563/article/details/162770998</guid><author>chh563</author><pubDate>Sun, 12 Jul 2026 06:35:44 +0800</pubDate><description><![CDATA[适配器是一种设计模式，将一个类的接口转换成用户希望的另一个接口。stackqueue本身不是容器，而是对已有容器的接口进行包装，称为容器适配器。public:// 大堆需要 operator<if (_year!if (_month!// 小堆需要 operator>if (_year!if (_month!// 大堆// 小堆大堆需要operator<，小堆需要operator>。或者通过仿函数/函数对象指定比较规则。]]></description><category></category></item><item><title><![CDATA[C++--list]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/162697617</link><guid>https://blog.youkuaiyun.com/chh563/article/details/162697617</guid><author>chh563</author><pubDate>Fri, 10 Jul 2026 21:21:33 +0800</pubDate><description><![CDATA[底层是链表，访问第 n 个元素需要 O(n) 遍历。list 是非连续空间，每个节点独立申请内存，不需要预留空间，也没有"容量"的概念。等操作跳转到相邻节点，原生指针做不到），而 vector 的迭代器才是原生指针。因为链表插入只改指针指向，不搬移已有节点，也不扩容。| 任意位置插入删除 | O(n)，需搬移元素 || 随机访问 | O(1) | O(n) |（哨兵节点），不是最后一个有效元素。，其他节点的迭代器不受影响。返回头结点下一个节点的值，返回头结点上一个节点的值。的值，保证区间对称。]]></description><category></category></item><item><title><![CDATA[C++--vector]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/162697505</link><guid>https://blog.youkuaiyun.com/chh563/article/details/162697505</guid><author>chh563</author><pubDate>Thu, 09 Jul 2026 14:34:48 +0800</pubDate><description><![CDATA[迭代器底层是原生指针T*。当 vector 底层空间发生变化（扩容），旧空间被释放，迭代器仍指向已释放的内存，继续使用会导致程序崩溃或未定义行为。end()]]></description><category></category></item><item><title><![CDATA[C++--string]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/160914728</link><guid>https://blog.youkuaiyun.com/chh563/article/details/160914728</guid><author>chh563</author><pubDate>Wed, 08 Jul 2026 14:44:55 +0800</pubDate><description><![CDATA[输入一行字符串，输出最后一个单词的长度。必须用getline而非cin >>，因为cin >>遇到空格就结束读取。while (getline(cin, line)) { // 必须用 getline，不能用 cin>>// 找到最后一个空格// 最后一个单词长度return 0;]]></description><category></category></item><item><title><![CDATA[C++--模版初阶]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/160055014</link><guid>https://blog.youkuaiyun.com/chh563/article/details/160055014</guid><author>chh563</author><pubDate>Sat, 11 Apr 2026 15:22:23 +0800</pubDate><description><![CDATA[返回值类型 函数名(参数列表) {// 函数体class 类模板名 {// 类内成员定义// ❌ 不建议：声明和定义分离到 .h 和 .cpp // 会出现链接错误！// ✅ 建议：声明和定义放在同一个头文件中原因后续章节会讲解（模板实例化需要完整定义可见）│ C++ 模板初阶总结 ││ ││ 【泛型编程】 ││ 目的：编写与类型无关的通用代码 ││ 核心：模板是泛型编程的基础 ││ ││ 【函数模板】 ││ 格式：template<typename T> │。]]></description><category></category></item><item><title><![CDATA[C++--内存管理]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/160052546</link><guid>https://blog.youkuaiyun.com/chh563/article/details/160052546</guid><author>chh563</author><pubDate>Sat, 11 Apr 2026 12:55:31 +0800</pubDate><description><![CDATA[/ malloc/free：只开空间，不调用构造/析构free(p1);// new/delete：开空间 + 调用构造/析构// 调用构造函数delete p2;// 调用析构函数// 数组形式// 调用10次构造函数// 调用10次析构函数return 0;1. 调用 operator new 申请空间2. 在申请的空间上执行构造函数1. 在空间上执行析构函数。]]></description><category></category></item><item><title><![CDATA[从零开始学C++--类和对象]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/159921537</link><guid>https://blog.youkuaiyun.com/chh563/article/details/159921537</guid><author>chh563</author><pubDate>Tue, 07 Apr 2026 14:30:35 +0800</pubDate><description><![CDATA[类中有动态内存分配（new/malloc类中有文件操作、网络连接等资源。]]></description><category></category></item><item><title><![CDATA[从零开始学习C++ -- 基础知识]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/159433303</link><guid>https://blog.youkuaiyun.com/chh563/article/details/159433303</guid><author>chh563</author><pubDate>Thu, 26 Mar 2026 19:27:28 +0800</pubDate><description><![CDATA[定义命名空间，需要使用到namespace关键字，后面跟命名空间的名字，然后接一对{}即可，{}中即为命名空间的成员，命名空间中可以定义变量、函数、类型等。namespace本质是定义一个域，这个域跟全局域各自独立，不同的域可以定义同名变量，所以下面的rand不冲突。C++中域有函数局部域，全局域，命名空间域，类域；域影响的是编译时语法查找一个变量/函数/类型出处（声明或定义）的逻辑，所以有了域隔离，名字冲突就解决了。]]></description><category></category></item><item><title><![CDATA[别再死记！彻底吃透经典排序算法]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/159317687</link><guid>https://blog.youkuaiyun.com/chh563/article/details/159317687</guid><author>chh563</author><pubDate>Wed, 25 Mar 2026 15:49:16 +0800</pubDate><description><![CDATA[🔥 零基础也能看懂 | 💻 全程可运行 C 代码 | ⚡ 复杂度一眼对比 | ❌ 避开 90% 新手误区。]]></description><category></category></item><item><title><![CDATA[二叉树的遍历--前中后序、层序遍历]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/158930408</link><guid>https://blog.youkuaiyun.com/chh563/article/details/158930408</guid><author>chh563</author><pubDate>Mon, 16 Mar 2026 10:31:53 +0800</pubDate><description><![CDATA[在学习二叉树之前，我们要先创建一个二叉树，由于此时我们不太了解二叉树的真正创建方式，因此我们先手动快速创建一颗二叉树来学习。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一，也是二叉树上进行其它运算的基础。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。学习二叉树结构，最简单的方式就是遍历。由于被访问的结点必是某子树的根，所以。其中的部分内存空间是重复利用的。对于中序遍历和后序遍历也是同理。]]></description><category></category></item><item><title><![CDATA[二叉树关于堆的学习]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/158886155</link><guid>https://blog.youkuaiyun.com/chh563/article/details/158886155</guid><author>chh563</author><pubDate>Wed, 11 Mar 2026 16:56:18 +0800</pubDate><description><![CDATA[向上调整过程中，调到最后不能用parent >= 0作为结束循环的条件，因为当parent = 0时，parent=(child-1)/2永远等于0，因此用child来做判断。HeakPop删除的是堆顶（根位置），不能使用覆盖方法，不然会使堆的数据关系全乱了。过程：先将堆顶数据与数组最后一个数据互换，然后删除最后一个数据，再进行向下调整算法。树结构，既要保存值域，也要保存节点与节点之间的关系。顺序存储就是用数组来存储，只适合完全二叉树，因为不是完全二叉树会有空间的浪费。要前k小数据就要求比堆顶数据小。]]></description><category></category></item><item><title><![CDATA[系统认识栈和队列]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/158881034</link><guid>https://blog.youkuaiyun.com/chh563/article/details/158881034</guid><author>chh563</author><pubDate>Tue, 10 Mar 2026 15:05:00 +0800</pubDate><description><![CDATA[队列是只允许在一端插入数据，在另一端删除数据的特殊线性表，先进先出。1.栈是后进先出的，它既可以用数组，也可以用单向链表实现。栈就是一种实现数据后进先出的数据结构，是一种特殊的线性表。2.队列是先进先出，它既可以靠顺序表也可以用链表实现。]]></description><category></category></item><item><title><![CDATA[关于链表的成环问题的深入研究]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/158731696</link><guid>https://blog.youkuaiyun.com/chh563/article/details/158731696</guid><author>chh563</author><pubDate>Fri, 06 Mar 2026 11:07:58 +0800</pubDate><description><![CDATA[所以该等式不成立，所以当fast每次走3个节点，slow每次走一个节点时，fast一定能追上slow。fast走的距离：L+（x-1）* C+a+N = L+x。此时头结点和相遇节点同时走，在环起始节点相遇便得到证明。化简得：L=（x-1）* C+C-N。因为（x+1）*偶数 = 偶数。偶数=（x+1）*偶数-奇数。此时：N是奇数，C是偶数。fast走的举例是：L+x。即2L=（x+1）*C-N。则有2（L+N）= L+x。slow走的距离：L+N。slow走的距离是：L。]]></description><category></category></item><item><title><![CDATA[照着做轻松实现项目--贪吃蛇小游戏]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/158418282</link><guid>https://blog.youkuaiyun.com/chh563/article/details/158418282</guid><author>chh563</author><pubDate>Sat, 28 Feb 2026 13:00:44 +0800</pubDate><description><![CDATA[Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外， 它同时也是⼀个很⼤的服务中⼼，调⽤这个服务中⼼的各种服务（每⼀种服务就是⼀个函数），可以帮应⽤程序达到开启视窗、描绘图形、使⽤周边设备等⽬的，由于这些函数服务的对象是应⽤程序(Application)， 所以便称之为 Application Programming Interface，简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应⽤程序编程接⼝。]]></description><category></category></item><item><title><![CDATA[学习预处理]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/157843505</link><guid>https://blog.youkuaiyun.com/chh563/article/details/157843505</guid><author>chh563</author><pubDate>Mon, 09 Feb 2026 07:43:18 +0800</pubDate><description><![CDATA[C语言设置了一些预定义符号，可以直接使用，预定义符号也是在预处理阶段处理的。__FILE__ //进行编译的文件__LINE__ //文件当前的行号__TIME__ //文件被编译的时间__DATA__ //文件被编译的日期__STDC__ //如果编辑器遵循ANSI C，其值为1，否则未定义//例子：（续行符  \ ,后面不能有空白）100registerfor;;//对于for(),初始值、判断条件、更新都可省略，但判断条件要省略的话，就进入了死循环printf;]]></description><category></category></item><item><title><![CDATA[编译和连接]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/157810489</link><guid>https://blog.youkuaiyun.com/chh563/article/details/157810489</guid><author>chh563</author><pubDate>Sat, 07 Feb 2026 12:49:13 +0800</pubDate><description><![CDATA[预处理阶段主要处理那些源文件中#开始的预编译指令。编译器所做的分析是语义的静态分析。静态语义分析包括类型的匹配，类型的转换等。链接过程主要包括：地址和空间分配，符号决议和重定位等这些步骤。在预处理阶段，源文件和头文件会被处理成 .i 的文件。在ANSI C的任何一种实现中，存在两个不同的环境。又可以分成：预处理、（预编译）、编译、汇编三个过程。解决的是一个项目中多文件、多模块之间互相调用的问题。根据汇编指令和机器指令一一进行翻译，不做指令优化。将汇编代码转变成机器可以执行的指令。，生成相应的汇编代码文件。]]></description><category></category></item><item><title><![CDATA[学习文件操作]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/157657983</link><guid>https://blog.youkuaiyun.com/chh563/article/details/157657983</guid><author>chh563</author><pubDate>Fri, 06 Feb 2026 09:44:09 +0800</pubDate><description><![CDATA[如果没有文件，我们写的程序的数据是存储在电脑的内存中，如果程序退出，内存回收，数据就会丢失，如果要将数据进行持久化保存，我们可以使用文件。磁盘（硬盘）上的文件是文件。程序设计中，一般谈的文件有两种：程序文件、数据文件（从文件功能的角度来分类）。int main()//1.打开文件return 1;//2.读文件//3.关闭文件fclose(pf);pf = NULL;return 0;int main()//1.打开文件return 1;//2.读文件。]]></description><category></category></item><item><title><![CDATA[动态内存管理]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/157516792</link><guid>https://blog.youkuaiyun.com/chh563/article/details/157516792</guid><author>chh563</author><pubDate>Sun, 01 Feb 2026 12:55:21 +0800</pubDate><description><![CDATA[int s = 4，这种空间开辟大小是固定的。]]></description><category></category></item><item><title><![CDATA[学习自定义类型：联合枚举]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/157511503</link><guid>https://blog.youkuaiyun.com/chh563/article/details/157511503</guid><author>chh563</author><pubDate>Thu, 29 Jan 2026 18:54:11 +0800</pubDate><description><![CDATA[/联合体类型的声明union Unchar c;int i;]]></description><category></category></item><item><title><![CDATA[理解结构体]]></title><link>https://blog.youkuaiyun.com/chh563/article/details/157434255</link><guid>https://blog.youkuaiyun.com/chh563/article/details/157434255</guid><author>chh563</author><pubDate>Wed, 28 Jan 2026 19:25:02 +0800</pubDate><description><![CDATA[所以不能对位段的成员使用&操作符，这样就不能使用scanf直接给位段的成员输入值，只能是先输入放在一个变量中，然后赋值给位段的成员。1.位段的成员必须是int 、unsigned int 或 signed int，在c99中位段成员的类型也可以选择其他类型。Node是对前面的匿名结构体类型的重命名产生的，但在匿名结构体内部提前使用Node类型创建成员变量，这是不行的。2.位段的空间上是按照需要以4个字节（int）或者1个字节（char）的方式来开辟的。计算结构体的大小 ------- 结构体内存对齐。]]></description><category></category></item></channel></rss>