C语言初阶以及进阶内容专栏
文章平均质量分 79
C语言的初阶和进阶知识,算是我呕心沥血总结的笔记,欢迎大家指正!(o゚▽゚)o
陈大大陈
大家好,我对编程非常感兴趣!有喜欢编程的同学我们可以做朋友,一起学习进步。
我还是阿里云乘风者计划专家博主,致力于为编程初学者答疑解惑。
展开
-
从零带你底层实现unordered_map的代码补全
改了一下开散列,加入了哈希桶,上期忘记加上了,现在补上,不好意思。原创 2023-11-28 14:58:43 · 464 阅读 · 2 评论 -
从零带你底层实现unordered_map (2)
💯 博客内容:从零带你实现unordered_map😀 作 者:陈大大陈🚀 个人简介:一个正在努力学技术的准C++后端工程师,专注基础和实战分享 ,欢迎私信!💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘哈希/散列:映射,关键字和另一个值建立一个关联关系。哈希表/散列表:映射,关键字和储存位置建立一个关联关系。哈希/散列是一种算法思想,而哈希表/散列表是基于这种算法思想而实现的一种数据结构,这点很容易混淆。上一篇博客介绍了两个解决哈希冲突的方法,原创 2023-11-28 14:20:30 · 1279 阅读 · 22 评论 -
从零带你底层实现unordered_map (1)
它是一个单向的迭代器。为什么专门提到这个呢?因为这是我踩过坑的地方!!单向迭代器压根就不能使用sort函数来排序!std::unordered_map的迭代器类型是ForwardIterator,而不是sort函数要求的RandomAccessIterator,这里不符合。我们要排序的话,还是将unordered_map里存的值,转存到vector里面。然后我们再自定义一个排序方法,对vector进行排序。原创 2023-11-20 23:08:47 · 969 阅读 · 19 评论 -
并查集模版以及两道例题
上面的时间复杂度最好能有O(1)。实现方式是记忆化搜索,用数组存储好所需结果,需要时就不用再次递归了。这种并查集查找的效率太低,最坏情况的时间复杂度能达到O(N)。我们就针对它优化。上面的时间复杂度最好能有O(1)。实现方式是记忆化搜索,用数组存储好所需结果,需要时就不用再次递归了。来看两个例题巩固一下。How Many Tables(并查集)Problem - 1213 (hdu.edu.cn)题目:Today is原创 2023-11-06 19:45:15 · 392 阅读 · 27 评论 -
多态 多继承的虚表深度剖析 (3)
这么打印,需要注意的是,d是一个Derive类,加一的话会加上一个Derive的大小。我没看到,编译器仍旧是故技重施,欺骗我们的眼睛,我们检测监测不到func3。但是这样的话,就会衍生出一个问题,它自己的虚函数也就是func3放在哪里呢?此时有看起来有3个虚表,其实还是2个。答案是,因为继承了Base1和Base2两个类,所以有两个虚表。上面这种多继承的情况,Derive有几个虚表呢?我们得到结论,func3放到了第一个虚表里面。答案是两张,这种情况就跟普通的多继承没两样。还可以这样写,最聪明的一种写法。原创 2023-11-05 22:08:45 · 1349 阅读 · 23 评论 -
多态 虚函数表深度剖析 纯干货讲解(2)
打开内存监视窗口,我们高度怀疑后面两个地址是被隐藏的两个虚函数的地址。虚函数和普通函数一样,存在代码段,同时将虚函数地址存了一份到虚函数表。第一次编译器出了bug,没有在虚表后标识上0,第二次就好了。终于到了放终结技的时候了,我们可以在打印的时候同时调用函数。上面我们埋下了伏笔,在命令行窗口会打印出来调用函数的信息。经过测试,虚表是储存在常量区的代码段的,跟常量很接近。虚表储存在类的前四个字节,我们就取这四个字节打印出来。并不是这样,监视窗口看到的内容是经过编译器处理的。看不明白的老铁可以看看上面的图。原创 2023-11-05 18:01:27 · 192 阅读 · 12 评论 -
C++ 多态 纯干货讲解 复制可调试(1)
从上面可以看出,C++对函数重写的要求比较严格,但是有些情况下由于疏忽,可能会导致函数名字母次序写反而无法构成重载,而这种错误在编译期间是不会报出的,只有在程序运行时没有得到预期结果才来debug会得不偿失,因此:C++11提供了override和final两个关键字,可以帮助用户检测是否重写。调用指针或者引用指向的对象,指向父类就调用父类,指向子类就调用子类。查找虚函数表中存储的地址,是父类就调用父类,是子类就切割成父类对象。答案是B,容易选成D,需要注意的是,虚函数继承声明,重写实现。原创 2023-11-04 22:50:11 · 239 阅读 · 16 评论 -
(面试)谈谈我对C++面向对象特性的理解
总的来说,面向对象是一种方法,这种方法是用来组织设计和实现的。组织设计就是找到解决问题的思路。实现就是把代码写出来。面向对象关键的核心在于,对象是组织和实现主要关注的东西,而不是过程。原创 2023-10-07 20:10:03 · 860 阅读 · 21 评论 -
C++的范围for语句详解 附易错实例
在范围for语句中定义的变量,容器或者数组内的每个元素都必须能转换成该变量的类型。实例2:将字符串中所有的大写字母转化成小写字母,将所有的小写字母转化成大写字母。但是有一点要特别注意,刚才举的例子中的变量i实质是数组a中每个元素的。如果仅是修改变量i的值,数组a中的元素的值是不会变化的。范围for语句是C++引入的一个语法糖,例如,下面的代码让数组中每一个元素加三。这么一看还是范围for语句比较简洁。如果要通过变量i修改数组中变量的值,所有的元素都处理完毕后循环终止。让编译器帮助制定合适的类型。原创 2023-07-09 17:23:20 · 704 阅读 · 11 评论 -
C++的auto类型说明符详解 附易错实例
C++里没有越界检测机制,即使正整数的值已经超过了字符串的长度,循环体依旧可以成功运行。所以程序会莫名其妙的输出乱码。而且,即使i从正整数值递减到0,依然会因为刚才解释的原因再次回到那个非常大的正整数值。所以程序是一个死循环。要解决死循环也非常简单。原创 2023-07-08 21:49:14 · 1133 阅读 · 45 评论 -
C++ string中内置的字符串操作和标准库中常用字符处理函数
💯 博客内容:C++读取一行内个数不定的整数的方式😀 作 者:陈大大陈🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘string中定义了求字符串长度,比较,拷贝等操作,并把他们封装成了一个个函数。原创 2023-07-07 20:37:46 · 397 阅读 · 3 评论 -
C++读取一行内个数不定的整数的方式
💯 博客内容:C++读取一行内个数不定的整数的方式😀 作 者:陈大大陈🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘。原创 2023-07-07 16:49:10 · 1288 阅读 · 35 评论 -
C++的引用 拷贝赋值和引用赋值
引用是C++里面才有的概念。引用并不是定义了一个新的变量,它只是为一个现存变量起的别名。例如:k就是i的一个别名。定义引用需要注意的地方:来看几个错误的例子巩固一下:但是可以在一条语句中定义多个引用。例如: 拷贝赋值和引用赋值其实就类似于传值和传址的区别。下面来具体看两个代码:运行结果: 运行结果: 第一个是拷贝赋值,第二个是引用赋值。总之一句话,引用即别名。引用并没有创建一个新的变量,只是对原有的变量起了一个新的名字。原创 2023-07-06 20:12:56 · 640 阅读 · 4 评论 -
【PAT B 1010,1011】一元多项式求导 ,A+B和C
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。给定区间 [−231,231] 内的 3 个整数A、B和C,请判断A+B是否大于C。原创 2023-07-06 16:27:50 · 575 阅读 · 9 评论 -
爱玩粥的有福了,带图形界面的明日方舟皮肤的员工管理系统,数据结构期末实训满分。
这个程序底层是easyx图形库,通过在easyx上封装的一个工具类(即输入框、按钮、label等),是在此基础上开发的这个系统。我们期末的数据结构实训已经结束了,我凭借着一手粥批图形界面员工管理系统给老师整不会了,也是顺利得到优秀,接下来就给大家展示一下我一周的成果!原创 2023-07-03 10:49:42 · 678 阅读 · 40 评论 -
期末不知道如何复习数据结构的话,不妨点进来看看。看明白保你过。
本文适合最近要靠数据结构的同学们,代码附有详尽解释。原创 2023-06-22 23:04:00 · 757 阅读 · 48 评论 -
【茶话数据结构】查找最短路径——Dijkstra算法详解(保姆式详细图解,步步紧逼,保你学会)
复习到离散数学图论时,想起来这个算法,感觉很有写博客的必要!今天这篇博客就来讲一下查找最短路径的Dijkstra算法。Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。Dijkstra 算法原始版本仅适用于找到两个顶点之间的最短路径,后来更常见的变体固定了一个顶点作为源结点然后找到该顶点到图中所有其它结点的最短路径,产生一个最短路径树。本算法每次取出未访问结点中距离最小的原创 2023-06-05 23:50:55 · 7582 阅读 · 47 评论 -
【数据结构】向上调整建堆和向下调整建堆的天壤之别以及堆排序算法
我们仍旧按最坏的情况来算。最后一层的每个节点都需要向上调整h-1次,光最后一层调整的次数就已经有2^(h-1)*(h-1)次了。光看这一层可以看出差距。上一条讲的向下调整的特点是节点多的层级调整的次数少,是少乘多。而现在讲的向上调整恰恰相反。节点多的层级调整的次数多,是多乘多,这就造成了时间复杂度的巨大差异。同样来计算一下。假设高度为h。F(h)=2^1*1+2^2*2+……+2^(h-2)*h-2+2^(h-1)*(h-1)同样使用错位相减,解得F(h) = 2^h原创 2023-05-25 20:13:49 · 1227 阅读 · 36 评论 -
假如面试官让你十分钟完成双向循环链表
双向循环链表那么多的功能,怎么是10分钟能写完的东西呢?为了尽可能地减少代码量,让我们能在10分钟内打出来,我们需要发掘其中可以简化的部分。紧接着就是头删和尾删,同理,它们也不过是LTErase函数在头部和尾部的实现而已。要是我问你会不会写双向循环链表,那你一定会不假思索的回答——我当然会。这样的代码量,我勉强能在10分钟之内打完,大家就更不用说了,5分钟足矣。反正头插和尾插也不过是LTInsert函数在头部和尾部的实现而已。如图,我们第一时间想到的恐怕就是这样的写法,又臭又长。实现之后大概就是这个样子。原创 2023-05-13 18:58:44 · 1559 阅读 · 41 评论 -
面试官一个简单的问题,让我emo了两年半
“小伙子,你擅长什么语言呢?😊😊😊”眼前的面试官和善的问我。“哼哼,当然是C语言,我可是C语言大佬!😋😋😋”我骄傲不已,想着自己一定能惊艳到面试官。面试官递给我一道题目,看到这道题目,我漏出自信迷人的微笑。原创 2023-04-07 13:18:13 · 11314 阅读 · 56 评论 -
适合初学者的超详细实用调试技巧(上)
一名优秀的程序员是一名出色的侦探。每一次的调试都是破案的过程。原创 2023-02-19 00:02:43 · 1575 阅读 · 7 评论 -
适合初学者的超详细实用调试技巧(下)
十分适合C语言初学者的详细调试技巧(下)原创 2023-02-20 16:43:55 · 1464 阅读 · 19 评论 -
保姆式指针讲解,超详细,适合初学者
指针的总梳理,讲的很详细,适合初学者原创 2022-12-22 22:13:56 · 1320 阅读 · 2 评论 -
分支语句和循环语句(超详细保姆级,适合初学者)
C语句可分为以下五类:1. 表达式语句2. 函数调用语句3. 控制语句4. 复合语句5. 空语句下面介绍控制语句。控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:1.条件判断语句也叫分支语句:if语句、switch语句;2.循环执行语句:do while语句、while语句、for语句;3.转向语句。原创 2023-01-08 17:17:13 · 623 阅读 · 6 评论 -
操作符详解(全网最详细的操作符详解)
操作符种类繁多,本文将帮助大家详尽地遍历一边所有的操作符,希望对大家有所帮助!1.操作符分类2.算数操作符1.之外,其他的几个操作符可以作用于。2. 对于 / 操作符如果两个操作数都为整数,执行。而只要有浮点数执行的就是浮点数除法。3. % 操作符的两个操作数必须为整数。返回的是。3.移位操作符 右移操作符注:移位操作符的操作数只能是整数。3.1 左移操作符移位规则:左边抛弃,右边补零。原创 2023-02-12 00:58:42 · 1626 阅读 · 9 评论 -
【跟着操作就行了】手把手教你 编译+链接 程序环境教程
最详细的一篇,跟着操作就行,欢迎私信询问,在线秒答。原创 2023-04-06 13:38:44 · 1796 阅读 · 13 评论 -
适合初学者的字符函数和字符串函数(学不会打我)上
学习进阶字符函数和字符串函数,看这一篇就够了!这篇博客旨在总结我自己阶段性的学习,要是能帮助到大家,那可真是三生有幸!🌞🌞🌞原创 2023-03-13 10:02:59 · 1846 阅读 · 20 评论 -
深度剖析数据在内存中的存储(下)(适合初学者)
适合初学者,保你看完通透的讲解。上篇讲解了整形在内存中的存储方式,这篇文章就来继续讲解浮点数在内存中的存储方式。原创 2023-02-23 23:37:32 · 2865 阅读 · 16 评论 -
结构体全解,适合初学者的一条龙深度讲解(附手绘图详解)
结构体全解,适合初学者的一条龙深度讲解,自定义类型又包括结构体类型,联合体类型还有枚举类型。今天的文章,我们就着重讲解这其中的结构体类型。原创 2023-03-18 18:51:57 · 5474 阅读 · 58 评论 -
写程序必会的C语言文件操作(上)附手绘图详解
磁盘上的文件就是文件。然而在程序设计中,我们所谈的文件有两种,一种是程序文件,另一种是数据文件(从文件功能的角度来分类的)。原创 2023-03-30 00:03:39 · 2062 阅读 · 13 评论 -
C语言拔高知识——指针的进阶(万字大文超详细)
指针的进阶,这一篇就够了!适合初学者,保你看完恍然大悟。原创 2023-03-02 23:28:02 · 2953 阅读 · 25 评论 -
深度剖析数据在内存中的存储(上)
深度剖析数据在内存中的存储,适合初学者。原创 2023-02-22 23:54:30 · 1856 阅读 · 20 评论 -
我眼中的‘C’——动态内存+柔型数组
柔型数组是一片连续的空间,访问速度理所应当地会快一些,而结构中指针空间之间可能不连续,我们在访问内存的时候,可能不是直接去内存里面拿,而是先去寄存器里找,寄存器没有再找内存要,如果空间连续,后面空间的内容可能会加载到寄存器里面,那么访问速度就会加快,而如果空间不连续,先去寄存器找却没找到,这么一来效率就会降低。原创 2023-03-25 20:30:48 · 1793 阅读 · 39 评论