- 博客(21)
- 收藏
- 关注
原创 C++ const 成员函数有什么用
本文深入探讨了C++中const成员函数与迭代器的交互机制。当在const成员函数中调用容器的begin()方法时,由于this指针变为const类型,编译器会自动选择调用const版本的begin(),返回const_iterator而非普通iterator。这种机制通过两个重载的begin()方法实现:非const版本返回可修改的iterator,const版本返回只读的const_iterator。const成员函数末尾的const修饰符对确保常量正确性至关重要,它决定了编译器如何选择正确的函数重载版
2025-11-20 22:26:03
572
原创 找平衡二叉树(如 AVL 树、红黑树)当前节点的下一个节点的两种方法
文章摘要: 平衡二叉树的中序后继节点查找方法主要有两种:1)利用parent指针,分两种情况——当节点有右子树时,找右子树最左节点;无右子树时向上回溯至第一个左祖先节点。该方法时间复杂度O(logn),空间复杂度O(1)。2)不使用parent指针,通过栈实现中序遍历,记录prev节点定位后继,时空复杂度均为O(logn)。该操作广泛应用于二叉搜索树删除、有序遍历等场景,parent指针法效率更优,但两种方法均需掌握以提升算法能力。
2025-11-18 16:50:24
514
原创 C++ 模板编程解惑:为何std::vector<T>::iterator前要加typename?
在C++模板编程中,使用std::vector<T>::iterator等嵌套依赖类型时可能遇到编译错误。这是因为编译器默认将依赖模板参数的名称视为非类型(变量/函数)。解决方案是在嵌套类型前添加typename关键字(如typename std::vector<T>::iterator),明确告知编译器这是类型而非变量。C++11后可用auto简化代码,但理解typename机制对阅读旧代码和深入模板编程仍有重要意义。
2025-11-18 13:27:22
944
原创 在二叉树中寻找两个节点的最近公共祖先
文章摘要:本文详细探讨了二叉树中寻找两个节点最近公共祖先(LCA)的算法,分为普通二叉树和二叉搜索树两种情况。对于普通二叉树,采用递归后序遍历方法,通过判断左右子树是否存在目标节点来定位LCA;对于二叉搜索树,则利用其有序性特点,通过比较节点值大小关系进行高效搜索。两种方法的时间复杂度分别为O(N)和O(H),其中H为树高。文章通过C++代码实现并分析了算法复杂度,强调了二叉搜索树搜索的更高效率。
2025-11-17 12:35:23
574
原创 寻找环形链表的环入口点的三种方法
链表环检测与入口查找方法摘要 本文系统阐述了检测链表环及定位环入口的四种算法。1.快慢指针法:通过双指针速度差判断环存在,利用数学推导L=nC-x的关系精确定位入口点,时空复杂度分别为O(N)和O(1)。2.链表拆分法:将环形链表转化为两个相交链表问题,通过找交点确定入口。3.哈希表法:用集合记录访问节点,首次重复节点即为入口,空间复杂度O(N)。4.方法对比:快慢指针空间最优但逻辑复杂,哈希表最简单但耗内存,链表拆分法展示问题转化思路但会修改原结构。各方法适用场景不同,快慢指针适合内存受限场景,哈希表适用
2025-11-16 11:04:40
977
原创 数据结构:双向链表
这里我们在List.h文件中定义了一个结构体,并将其改名为了LTNode,如上图结构体中的两个指针分别用来保存前一个和后一个结构体(节点)的地址,另还有一个date数据用来存储数据。然后我们再在test.c文件中定义plist指针。随后我们的下一步就是初始化链表了!
2024-12-22 17:06:10
1628
14
原创 C语言专题之文件操作(巨详细)
来管理和操作文件。新作一篇,大家好,在小编之前的文章中小编已经介绍了部分文件操作相关的函数,不过小编也只是简要介绍了其函数原型,接下来在这篇博客中小编将详细介绍文件操作相关知识!通过精心设计的格式控制字符串,我们可以轻松地实现数据的标准化输出和输入,大大简化了文件处理的过程。在这个例子中,我们选择了"a"模式,这样可以确保新的日志条目被追加到现有内容的末尾,而不会意外地覆盖之前的记录。函数,开发者可以高效地处理各种二进制数据,无论是简单的数值还是复杂的结构体,都能实现快速、可靠的文件读写操作。
2024-12-14 18:16:27
1083
6
原创 C语言专题之宏的基本概念
宏定义是C/C++语言中一项强大而灵活的特性,它允许程序员使用预处理器指令来创建简化的代码表示。这种机制不仅提高了代码的可读性和可维护性,还能在某些情况下优化程序性能。#define 标识符 替换文本其中,“标识符”是用户定义的宏名,“替换文本”则是宏被调用时将被替换的内容。值得注意的是,宏定义并非C/C++语言的标准语句,而是一种预处理指令,因此在使用时无需在行末添加分号。类型描述无参数宏仅包含常量表达式带参数宏可接受参数,类似于函数。
2024-12-11 22:41:35
1653
15
原创 C语言专题之动态内存管理
动态内存管理是程序运行时按需分配和释放内存的过程。与静态内存分配相比,它提供了更灵活的内存使用方式,以适应数据大小不确定或运行时变化的情况。在C/C++等语言中,动态内存管理主要通过函数如malloc(), calloc(), realloc(), 和 free()来实现。
2024-12-07 17:48:06
520
3
原创 C语言专题之get相关函数介绍
1.这个函数不需要参数,它从标准输入流(通常是键盘输入)读取一个字符。2.函数返回值为读取到的字符的ASCII码值(以int类型返回)。如果发生错误或者到达文件末尾(例如在重定向输入时到达文件末尾),则返回EOF(EOF是一个在<stdio.h>中定义的宏,通常为 -1)。
2024-12-06 23:22:26
1383
2
原创 C语言专题之结构体的使用
结构体的声明和定义通常是分开进行的。首先,需要声明一个结构体类型,然后使用该类型定义结构体变量。例如:在这个例子中,我们声明了一个名为student的结构体类型,它包含了三个成员:name(字符数组)、age(整数)和score(浮点数)。然后,我们定义了一个名为s1的结构体变量,它的类型是student。
2024-12-05 23:36:10
675
3
原创 C语言专题之函数指针介绍
函数指针的声明形式为,其中 ptr 是指向返回类型为 return_type,参数为 arguments 的函数的指针。
2024-12-03 22:37:07
374
1
原创 C语言专题之指针数组和数组指针的区别以及函数指针的介绍
是一个指向数组的指针,其定义形式为数据类型 (*指针名)[数组长度]。例如int (*ptr)[5],这里ptr是一个指向包含5个int类型元素的数组的指针。是一个数组,其元素都是指针,定义形式为数据类型 *数组名[数组长度]。例如int *ptrArr[5],这表示ptrArr是一个包含5个整数指针的数组。
2024-12-02 23:12:12
534
1
原创 C语言专题之文件操作相关函数
1)函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);1)函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);1)函数原型:char *fgets(char *s, int n, FILE *stream);1)函数原型:int fputs(const char *s, FILE *stream);
2024-12-01 23:32:15
2056
2
原创 C语言专题之常用内存相关函数
在这个示例中,str1 和 str2 的前五个字节不完全相同('l' 和 'o' 的区别),因此 memcmp 返回一个非零值。memset函数用于将一块连续的内存区域中的所有字节设置为指定的值,注意是字节。memcmp 是一个强大且灵活的函数,它能够准确比较两个内存块的前 n 字节,非常适合用于需要逐字节精确比较的场景。当你使用 memset 时,需要确保你知道所使用的值在目标类型的上下文中是如何解释的。2.c: 要填充在每个字节中的值(注意:传入的是 int 类型,但实际填充的是该值的低8位)。
2024-11-29 22:45:26
2350
2
原创 C语言专题之字符串引号的使用
字符常量(如 'A')只包含一个字符,而字符串(如 "A")则被存储为一个字符数组,即使它只有一个字符,也会自动添加一个终止符'\0'。例如,字符串 "A" 实际上占用两个字节的内存,一个字节存储'A',另一个字节存储终止符'\0'。例如,'A'是一个字符,而"A"是一个包含一个字符的字符串。在写代码时我们经常会输入或输出字符或字符串,但对于字符我们知道需要使用双引号("")或单引号(' '),初学C语言的小伙伴可能会不理解在不同场合改如何使用,接下来我会给大家介绍他们的区别,以及不同的使用场景。
2024-11-28 23:17:08
1277
2
原创 C语言专题之常用字符串相关函数
该函数是用来在一个字符串中找另一个字符串的函数,返回找到的字符串的首字母的地址,如上图,在arr对应字符串中寻找p对应的字符串,若arr中包含p对应的字符串则返回找到的字符串的首字母的地址,即返回arr中e的地址,后续打印则会打印出e及其后面的字母,即efabcdef。strcpy是用来复制字符串内容的函数,函数返回目标字符串首字母的地址,函数第一个参数上传目标字符串首字母地址,第二个参数上传需要复制的字符串的首字母地址,即将第二个地址里的内容复制到第一个地址中去。而函数会返回目标字符串的首字母的地址。
2024-11-27 23:51:39
543
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅