
C++
文章平均质量分 94
从基础逐步深入学习C++!
uyeonashi
好像起风了~
展开
-
【C++】智能指针的使用及其原理
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存,一般是忘记释放或者发生异常释放程序未能执行导致的。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:普通程序运行一会就结束了出现内存泄漏问题也不大,进程正常结束,页表的映射关系解除,物理内存也可以释放。原创 2025-01-01 15:41:17 · 1152 阅读 · 0 评论 -
【C++】异常
异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理,异常使得我们能够将问题的检测与解决问题的过程分开,程序的一部分负责检测问题的出现,然后解决问题的任务传递给程序的另一部分,检测环节无须知道问题的处理模块的所有细节。C语言主要通过错误码的形式处理错误,错误码本质就是对错误信息进行分类编号,拿到错误码以后还要去查询错误信息,比较麻烦。异常时抛出一个对象,这个对象可以函数更全面的各种信息。原创 2024-12-29 15:39:36 · 973 阅读 · 0 评论 -
【C++11】包装器(function和bind)
本篇讲述了C++11中包装器中的 function 和 bind !原创 2024-12-28 17:40:17 · 984 阅读 · 0 评论 -
【C++11】lambda
C++ 本篇讲述了C++11中lambda的应用!原创 2024-12-28 15:57:35 · 1141 阅读 · 0 评论 -
【C++11】可变参数模版
本篇承接上文,讲述了C++11中可变参数模版,从基本语法及原理、包拓展、empalce系列接口讲解!原创 2024-12-27 17:10:59 · 1009 阅读 · 0 评论 -
【C++11】类型分类、引用折叠、完美转发
C++11以后,进一步对类型进行了划分,右值被划分纯右值(pure value,简称prvalue)和将亡值(expiring value,简称xvalue)。纯右值是指那些字面值常量或求值结果相当于字面值或是一个不具名的临时对象。如: 42、true、nullptr 或者类似str.substr(1, 2)、str1 + str2 传值返回函数调用,或者整形a、b,a++,a+b 等。纯右值和将亡值C++11中提出的,C++11中的纯右值概念划分等价于C++98中的右值。原创 2024-12-26 22:10:47 · 1136 阅读 · 0 评论 -
【C++11】右值引用和移动语义的使用场景
本篇接上文,继续讲解c++11,有无移动赋值和移动构造前后的对比!原创 2024-12-26 17:00:19 · 1047 阅读 · 0 评论 -
【C++11】 右值引用和移动语义
现代C++中,lvalue 被解释为loactor value的缩写,可意为存储在内存中、有明确存储地址可以取地址的对象,而 rvalue 被解释为 read value,指的是那些可以提供数据值,但是不可以寻址,例如:临时变量,字面量常量,存储于寄存器中的变量等,也就是说左值和右值的核心区别就是能否取地址。C++98的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,C++11之后我们之前学习的引用就叫做左值引用。等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,原创 2024-12-26 14:01:11 · 773 阅读 · 0 评论 -
【C++】用哈希表封装unordered_map和unordered_set
SGI-STL30版本源代码中没有unordered_map和unordered_set,SGI-STL30版本是C++11之前的STL版本,这两个容器是C++11之后才更新的。但是SGI-STL30实现了哈希表,只容器的名字是hash_map和hash_set,他是作为非标准的容器出现的,非标准是指非C++标准规定必须实现的,源代码在hash_map/hash_set/stl_hash_map/stl_hash_set/stl_hashtable.h中。原创 2024-12-22 22:23:13 · 993 阅读 · 0 评论 -
【C++】哈希表实现
当key是string/Date等类型时,key不能取模,那么我们需要给HashTable增加一个仿函数,这个仿函数支持把key转换成一个可以取模的整形,如果key可以转换为整形并且不容易冲突,那么这个仿函数就用默认参数即可,如果这个Key不能转换为整形,我们就需要自己实现一个仿函数传给这个参数,实现这个仿函数的要求就是尽量key的每值都参与到计算中,让不同的key转换出的整形值不同。,那么计算出的哈希值都是15,因为63的二进制后8位是 00111111,31的二进制后8位是 00011111。原创 2024-12-21 15:36:48 · 1308 阅读 · 0 评论 -
【C++】unordered_map和unordered_set的使用
最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对unordered_map和unordered_set进行介绍,unordered_multimap和unordered_multiset可查看文档介绍。• unordered_set底层是用哈希桶实现,增删查平均效率是 ,迭代器遍历不再有序,为了跟set区分,所以取名unordered_set。原创 2024-12-20 17:09:45 · 1148 阅读 · 0 评论 -
【C++】红黑树实现STL中的map和set
【C++】这篇博客我们将上篇博客实现的红黑树来封装成自己实现的set和map,来模拟一下库里的map和set原创 2024-12-12 22:51:59 · 1059 阅读 · 0 评论 -
【C++】红黑树实现
红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜色,可以是红色或者黑色。通过对任何⼀条从根到叶⼦的路径上各个结点的颜色进行约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因而是接近平衡的。原创 2024-12-06 23:15:09 · 1225 阅读 · 0 评论 -
【C++】AVL树实现
本文详细介绍了AVL树的基本概念、平衡因子、插入规则和旋转操作,包括左旋、右旋以及LR双旋和RL双旋。原创 2024-12-02 10:34:05 · 1105 阅读 · 0 评论 -
【C++】STL——map和set
【C++】本片是关于map和set的使用讲解!原创 2024-11-28 14:43:46 · 783 阅读 · 0 评论 -
【C++】二叉搜索树
【C++】本篇记录了关于c++二叉搜索树的相关知识!原创 2024-11-28 13:58:13 · 1173 阅读 · 0 评论 -
【C++】多态
C++中的多态是一种强大的特性,它允许程序员以统一的方式处理不同的对象类型,并提供了更高的灵活性和可扩展性。然而,在使用多态时需要注意其可能带来的性能损失和调试困难等问题。原创 2024-11-20 12:27:50 · 891 阅读 · 0 评论 -
【C++】继承
C++ 继承学习笔记记录!原创 2024-11-17 15:08:29 · 1309 阅读 · 0 评论 -
【C++】模版进阶
C++ 模版的学习记录!原创 2024-11-13 13:25:14 · 915 阅读 · 0 评论 -
【C++】STL--queue、deque、priority的模拟实现和应用
C++ 学习笔记记录!原创 2024-11-12 11:46:03 · 1017 阅读 · 0 评论 -
【C++】STL— stack的常见用法和模拟实现
C++ 学习笔记记录!原创 2024-11-10 13:52:45 · 1107 阅读 · 0 评论 -
【C++基础】模板初阶
class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;原创 2024-07-20 19:52:46 · 1067 阅读 · 0 评论 -
【C++】STL—list剖析
list是一种适用于频繁插入和删除操作的容器,提供了高效的插入和删除性能,但随机访问的性能较差。因此,在选择使用list时需要根据具体的使用场景进行权衡原创 2024-09-17 17:35:41 · 765 阅读 · 0 评论 -
【C++】STL—vector
/ 下面涉及迭代器初始化的部分,我们学习完迭代器再来看这部分it!原创 2024-08-25 14:13:30 · 1075 阅读 · 0 评论 -
【c++】STL—string类
目录一、标准库中的string类1.1string类1.2 auto和范围forauto关键字范围for1.3 string类的常用接口说明1). string类对象的常见构造2). string类对象的容量操作3). string类对象的访问及遍历操作 4). string类对象的修改操作5). string类非成员函数 二、string的模拟实现浅拷贝深拷贝string模拟实现代码其余接口模拟实现代码C语言中的字符串:C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些s原创 2024-08-13 17:48:12 · 1027 阅读 · 0 评论 -
【C++基础】C/C++内存管理
6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理释放。3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,[ ]中指定对象个数即可。new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申。原创 2024-07-19 21:07:52 · 1000 阅读 · 0 评论 -
【C++基础】类和对象(4)(再探构造函数、类型转换、static成员、友元、内部类、匿名对象)
内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。注意:内部类就是。原创 2024-07-18 21:27:20 · 953 阅读 · 0 评论 -
【C++基础】类和对象(3) (赋值运算符重载、日期类实现、取地址运算符重载)
和其他函数一样,它也具有其返回类型和参数列表以及函数体。原创 2024-07-15 22:14:15 · 675 阅读 · 0 评论 -
【C++基础】类和对象(2)(构造函数、析构函数、拷贝函数)
⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。这里可以对比内置类型理解, 传值会引发拷贝, 每次调用形式参数, 都会引发对象的拷贝, 然后会层层传值,引发对象的拷贝递归调用, 所以我们一般写拷贝构造函数时, 一般形参写传引用, 就不会发生这种问题, 当然传指针也可以, 但是每次传递都需要取地址, 未免有些麻烦, 而且不符合拷贝构造的定义。字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。原创 2024-07-14 23:23:26 · 1087 阅读 · 0 评论 -
【C++基础】类和对象(1)
• class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后⾯分号不能省略。类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加 _ 或者m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是。原创 2024-07-13 23:41:05 · 835 阅读 · 0 评论 -
【C++基础】初识C++(2)--引用、inline、nullptr
C++的引⽤跟其他语⾔的引⽤(如Java)是有很⼤的区别的,除了⽤法,最⼤的点,C++引⽤定义后不能改变指向,Java的引⽤可以改变指向。还有这个是许多教材上喜欢写的,以前C语言的时候是不是很懵啊 ,⼀些主要⽤C代码实现版本数据结构教材中,使⽤C++引⽤替代指针传参,⽬的是简化程序,避开复杂的指针,但是很多同学没学过引⽤,导致⼀头雾⽔。也是类似,在类型转换中会产⽣临时对象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。原创 2024-07-12 22:09:55 · 558 阅读 · 0 评论 -
【C++基础】初识C++(1)
C++日常学习笔记记录!原创 2024-07-11 20:31:23 · 939 阅读 · 0 评论