![](https://img-blog.csdnimg.cn/d42a3fdaf4d64d02a8b77dd2ee8499ff.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++从入门到精通
文章平均质量分 96
由易到难,学会C++
LuckyRich1
一个正在努力学习的小菜鸡
展开
-
【C++】STL之空间配置器
空间配置器,顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的,在默默地工作。虽然在常规使用STL时,可能用不到它,但站在学习研究的角度,学习它的实现原理对我们有很大的帮助。原创 2024-07-18 09:17:17 · 1331 阅读 · 119 评论 -
【C++】C++的IO流
本篇博客主要介绍的是C++的IO流。的那套东西是面向过程的,C++这套东西是面向过程的。我们可以使用一个类来进行文件的读写,其中最重要的就是把C++对于文本文件读写的方法学一学,用着很方便。其他的作为了解知识学一学。原创 2024-03-15 09:23:26 · 1284 阅读 · 56 评论 -
【C++】C++的类型转换
本文主要介绍的C++类型转换,C有两种类型转换方式隐式类型转换和显示类型转换但是C++觉得C的类型转换方式不好,因此而C++规范了四种类型转换。这里就每种类型转换都做了详细介绍,以及每种类型转换适合什么场景。原创 2024-03-12 10:54:21 · 1091 阅读 · 64 评论 -
【C++】特殊类设计
本篇文章详细解决C++中特殊类设计,设计一个不能拷贝的类、设计一个只能在堆上创建对象的类、设计一个只能在栈上创建对象的类、设计一个不能被继承的类。其中一个我们可以在实际上运用的单例模式,单例模式实现有两种方式,饿汉模式,懒汉模式,其中懒汉模式实现需要考虑的问题更多!但是还有一种更为简单的懒汉模式实现方式,但是又条件限制!原创 2024-03-06 10:15:21 · 1358 阅读 · 70 评论 -
【C++】智能指针
为什么需要智能指针呢?有了智能指针带来了什么问题?库里是如何解决的?就不得不说智能指针发展的历史。auto_ptr的解决方法、unique_ptr解决方法、shared_ptr解决方法。shared_ptr线程安全问题、循环引用问题。还有定制删除器。原创 2024-03-02 10:38:14 · 1235 阅读 · 56 评论 -
【C++】异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。原创 2024-02-23 11:00:32 · 1393 阅读 · 52 评论 -
【C++】C++11下线程库
本文就C++11线程库做详细的解读,C++11线程库本质就是对不同平台线程库的封装!给线程传可调用对象可以是函数指针、函数对象、lambda。多个线程共享同一份共享资源就会涉及线程安全的问题,因此使用mutex锁,还有可以不加锁的原子操作,并且可能因为一个线程竞争锁的能力太强会导致一直在加锁解锁,因此又有了condition_variable.原创 2024-02-21 09:30:44 · 1370 阅读 · 44 评论 -
【C++】C++11中
本篇博客就C++11继续介绍,主要介绍的有lambda表达式、可变参数模板、function包装器以及绑定。原创 2024-02-19 09:53:06 · 996 阅读 · 30 评论 -
【C++】C++11上
C++11新增了很多东西,比如列表初始化、initializer_list、auto、范围for、STL容器的变化、其中这篇博客最重要的就是右值引用,什么是右值?右值引用有什么用,右值引用解决了什么问题给我带来了什么方便,还有新增的移动构造、以及移动赋值,我们就主要的一些东西进行介绍总结。原创 2024-02-16 09:57:13 · 971 阅读 · 33 评论 -
【C++】位图+布隆过滤器
本文着重介绍哈希表最后一些内容位图和布隆过滤器,我们已经见识到哈希表查找效率了,但是如果让你在40亿个不重复的整数找一个数,你还能用常规方法,如排序+二分、红黑树、哈希表这些去找吗?40亿个整数大约16G内存根本放不下!那该怎么做呢,因此就有了接下来的位图和布隆过滤器!原创 2024-01-24 11:02:53 · 1189 阅读 · 40 评论 -
【C++】unordered_map,unordered_set模拟实现
前面的文章我们已经学过哈希桶了,现在就根据哈希桶模拟实现unordered_map和unordered_set,并且在这篇文章我们第一次把普通迭代器和const迭代器分开写。分开写的原因是什么?如何实现哈希桶迭代器的++?以及unordered_map和unordered_set模拟实现都有那些需要注意的细节问题。原创 2024-01-20 10:44:19 · 1332 阅读 · 36 评论 -
【C++】哈希表
这是一篇超2万字的文章,详细介绍了unordered系列关联式容器,为什么会有unordered_maph和unordered_set它们和map和set的区别是什么,它们的效率与map和set做了对比。接下来详细介绍了哈希表,哈希映射:key值跟存储位置建立关联关系。对于范围比较集中的选择直接定址法,每个值都有唯一位置不会发生冲突,范围分散的选择除留余数法,但是余数相同的会发生冲突,处理冲突有闭散列--开发地址法:1、线性探测 2、二次探测。开散列--拉链法/哈希桶。每块都详细把写代码要注意的问题说清楚原创 2024-01-20 10:42:46 · 2021 阅读 · 20 评论 -
【C++】map和set的模拟实现
在前面几篇C++的博客,讲过了二叉搜索树,AVL树,红黑树。今天我们就用红黑树模拟实现map和set。那现在就有一个问题了。给你一颗红黑树你该如果用它模拟实现map和set呢?本文就一颗红黑树模拟实现map和set遇到的各种问题逐层分析。主要问题还是在于set的问题,返回值类型不匹配。还有正向迭代器以及反向迭代器的实现!原创 2023-12-18 09:56:53 · 731 阅读 · 32 评论 -
【C++】红黑树插入删除
这是一篇关于红黑树插入删除为主要内容的文章,本文详细讲述了红黑树的插入情形以及如何解决,代码如何实现,当然最重要的就是红黑树的删除,虽然红黑树删除不简单,但是删除的无非就是叶子节点,一个孩子的节点,两个孩子的节点,被删节点是红色还是黑色。其中最重要的就是删除的黑色叶子节点这有些麻烦,其他的都很简单!本文把每个情况都详细罗列出来。其实看完之后红黑树的删除真的没有那么难!!!原创 2023-12-14 16:37:18 · 1281 阅读 · 22 评论 -
【C++】AVL树插入删除
这是一篇深度剖析AVL的插入,删除,以及判断是否是AVL树为主体的内容,其中涉及到LL,RR,LR,RL旋转的详细讲解。并且这是用的三叉实现的AVL树。原创 2023-12-08 18:59:34 · 1448 阅读 · 28 评论 -
【C++】map和set的使用及注意事项
我们即将要学的map,set就是一种树形结构的关联式容器,也是用来存储数据的,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高。与序列式容器不同的是,数据与数据之前有紧密的关联,插入的数据有固定的位置,正因为插入的数据有固定的位置,才能快速进行搜索。原创 2023-12-05 11:05:09 · 1172 阅读 · 22 评论 -
【C++】二叉搜索树
这是一篇万子以上的博客,本文更准确的说可以算上二叉树的进阶,详细讲解的二叉搜索树的插入,删除,查找,以及递归查找,递归删除,递归查找和构造,析构,拷贝构造,以及赋值重载,详细讲解什么是K模型,什么是KV模型,以及二叉搜索树应用场景,以及二叉搜索树性能分析原创 2023-11-22 10:10:21 · 1228 阅读 · 18 评论 -
【C++】多态
这是一篇万字以上的文字,详细讲解了上面是多态,多态的原理,普通调用和多态调用的区别,静态绑定和动态绑定,虚表指针,虚表,如何打印虚表,单继承中虚表,多继承中虚表,菱形继承中虚表,菱形虚拟继承中虚表,以及一些常见继承和多态的题!原创 2023-11-15 10:24:27 · 881 阅读 · 38 评论 -
【C++】继承
这是一篇万字的博文,详细从各个方面阐述C++中的继承,包括基类和派生类对象赋值转换,继承中的作用域,派生类的默认成员函数,继承域友元,继承与静态成员,复杂的菱形继承及菱形虚拟继承,继承的总结与反思。绝对内容满满干货!!!原创 2023-11-07 18:30:39 · 279 阅读 · 20 评论 -
【C++】模板进阶
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】3. 模板会导致代码膨胀问题,也会导致编译时间变长4. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2023-11-06 11:07:01 · 467 阅读 · 22 评论 -
【C++】priority_queue模拟实现+仿函数+反向迭代器
仿函数其实是一个类的对象,也可以说是函数对象,因为这个类的对象可以像函数一样使用。仿函数类别有很多种,今天主要介绍less和greater(比大小仿函数 )。还记得C语言给我们提供了一个qsort函数,这个函数用到了函数指针。这个函数指针指向一个比大小的函数。C++既然包容C了,为什么不直接用这个函数指针呢?C++主要觉得函数指针太麻烦了。因此引入了仿函数。拿冒泡排序为例。下面是普通的冒泡排序,如果排升序>,降序原创 2023-10-29 18:58:46 · 345 阅读 · 34 评论 -
C++stack和queue模拟实现以及deque的介绍
stack和queue是目前为止,学过string,vector,list之后遇到最简单的两种容器,这篇内容涉及到容器适配器,这里做了详细解读。并且介绍了deque(双端队列)!原创 2023-10-17 21:52:06 · 907 阅读 · 18 评论 -
C++list模拟实现
这是一篇万字以上的文章,详细讲解了list模拟实现,其中最重要的就是迭代器模拟实现,这是一种从未接触的新东西,也是list最重要的东西。以及vector与list优缺点总结,并且涉及string,vector,list失效问题的讲解等内容。原创 2023-10-03 21:05:33 · 679 阅读 · 8 评论 -
C++vector模拟实现
本文详细模拟实现了vector,其中有三个易错点已经一一列出,并且详细解读原因,1.插入导致迭代器失效问题,2.删除导致迭代器失效问题,3reserve浅拷贝的问题!学完本篇文章一定大有收获!!!原创 2023-09-13 10:56:18 · 378 阅读 · 4 评论 -
C++vector的使用
1.vector是表示可变大小数组的序列容器.2.vector也采用连续空间存储元素,所以vector可以采用下标的方法对元素进行访问,但是又不想数组,它的大小是可以动态改变的。3.vector动态分配数组来存储它的元素,当新元素插入时,可能需要重新分配空间,把全部元素移到这个数组。就时间而言,这是一个比较大的开销,但是并不是每次插入元素,vector都会扩容。4.vector会分配额外多的空间以适应可能的增长,所以存储空间要比实际需要的存储空间更大。不同库采用不同的方法来进行空间的分配。原创 2023-09-11 12:54:05 · 137 阅读 · 0 评论 -
C++string类模拟实现
本文详细实现了string类各种接口,并且对有些容易写错的代码,做了详细解释,并介绍拷贝构造函数和赋值运算符重载函数两种现代写法。原创 2023-08-20 20:08:36 · 238 阅读 · 4 评论 -
C++之string类的使用
本文详细介绍了,为什么要学string类,为什么会有string类,以及string类各种接口的重点内容讲解!!!原创 2023-08-19 10:28:45 · 306 阅读 · 2 评论 -
C++STL简介
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2023-08-16 22:06:03 · 104 阅读 · 0 评论 -
C++模板初阶
使用函数重载,可以满足不同类型交换函数,但是出现一个类型就需要写对应类型的交换函数,并且这些交换函数的逻辑都是一样的,只是类型不一样。因为在函数模板实例化的时候,就有了这个具体函数,然后这里涉及隐式类型转换,并且参数由const修饰是没问题的,因此在推演的过程中就报错了。不用推演,直接实例化一份指定类型的函数,如果类型不一样,还是涉及隐式类型的转换,如果无法转换编译器将会报错。这是因为类模板一般没有推演的时间,函数模板实参传递给形参的时候,推演模板参数,因此类模板需要显示实例化。,对于模板函数的使用,原创 2023-07-23 15:53:58 · 202 阅读 · 2 评论 -
C/C++内存分布
exit(- 1);return 0;new和delete对于自定义类型,相比于malloc和free,除了开辟空间,还会调用构造函数和析构函数//使用malloc和free并不会调用构造函数和析构函数 //还需要在申请空间之后自己调用构造函数和析构函数 A * ptr2 =(A *) malloc(sizeof(A));exit(- 1);} //调用系析构函数 ptr2 -> ~ A();原创 2023-07-22 16:36:04 · 462 阅读 · 2 评论 -
C++类与对象(下)
虽然上述构造函数调用时,每个成员变量都有一个初始值了,但是这并不能称为类对象成员的初始化,构造函数体中的语句只能称为赋初值,而不能称为初始化,因为初始化只能初始一次,而构造函数体内可以多次赋值。原创 2023-06-28 12:07:22 · 596 阅读 · 12 评论 -
C++类与对象(中)
如果一个类中什么成员都没有,简称为空类。但是空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。隐含意思就是,有些类需要自己写,有些类,编译器默认生成就可以用了。对于Date类,我们需要调用Init函数进行初始化。每次初始化对象都要调用这个函数,未免有点麻烦,那么有没有一种方法可以在对象实例化的时候,就初始化对象呢?为了方便,C++引入了构造函数。构造函数是一个特殊的成员函数,名字与类原创 2023-06-25 09:02:41 · 288 阅读 · 2 评论 -
C++类与对象(上)
C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量**;现在以**C++方式实现,会发现struct中也可以定义函数。原创 2023-06-14 14:58:26 · 564 阅读 · 0 评论 -
超超超详细C++入门总结
C++入门难?C++入门学不会?来,看过来,这是一篇超超超详细的C++入门总结,包含命名空间,C++输入输出,缺省参数,函数重载,引用。。。原创 2023-06-08 22:58:09 · 377 阅读 · 6 评论