
C++
文章平均质量分 81
c++知识体系
大胆飞猪
初入炼题境
展开
-
C++29--C++的类型转换
每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。RTTI:Runtime Type Information的简称,即:运行时类型识别。因此C++提出了自己的类型转化风格,注意。C++通过以下方式来支持RTTI。原创 2025-03-15 16:41:19 · 696 阅读 · 0 评论 -
C++28--特殊类设计
为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙武就总结出了《孙子兵法》。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。原创 2025-03-13 18:06:25 · 1011 阅读 · 0 评论 -
C++27--智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。//1.内存申请了忘记释放//2.异常安全问题Func();//这里Func函数抛异常导致delete[] p3未执行,p3没被释放delete[]p3;原创 2025-03-10 07:32:15 · 891 阅读 · 0 评论 -
C++26--包装器(function bind)
arg_list中的参数可能包含形如_n的名字,其中n是一个整数,这些参数是“占位符”,表示newCallable的参数,它们占据了传递给newCallable的参数的“位置”。一般而言,我们用它可以把一个原本接收N个参数的函数fn,通过绑定一些参数,返回一个接收M个(M可以大于N,但这么做没什么意义)参数的新函数。C++中的function本质是一个类模板,也是一个包装器。其中,newCallable本身是一个可调用对象,arg_list是一个逗号分割的参数列表,对应给定的callable的参数。原创 2025-03-09 12:16:09 · 526 阅读 · 0 评论 -
C++25--lambda表达式
比如:[=.&a,&b]:以引用传递的方式捕捉变量a和b,值传递方式捕捉其他所有变量[&, a, this]: 值传递方式捕捉变量a和this,引用方式捕捉其他变量。通过上述例子可以看出,lambda表达式实际上可以理解为无名函数,该函数无法直接调用,如果想要直接调用,可借助auto将其赋值给一个变量。函数对象,又称为仿函数,即可以像函数一样使用的对象,就是在类中重载了operator()运算符的类对象。上述代码就是使用C++11中的lambda表达式解决,可以看出lambda表达式实际是一个匿名函数。原创 2025-03-08 21:45:41 · 1117 阅读 · 0 评论 -
C++24--右值引用C++11新特性
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2025-03-05 19:23:51 · 999 阅读 · 0 评论 -
C++23--位图和布隆过滤器
我们在使用新闻客户端看新闻时,它会给我们不停的推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。一种支持删除的方法:将布隆过滤器中的每个比特位扩展成一个小的计数器,插入元素时给k个计数器(k个哈希函数计算出的哈希地址)加1,删除元素时,给k个计数器减1,通过多占用几倍存储空间的代价来增加删除操作。比如:在布隆过滤器中查找”alibaba“时,假设3个哈希函数计算的哈希值为:1、3、7,刚好和其它元素的比特位重叠,此时布隆过滤器告诉该元素存在,但实该元素是不存在的。通常是用来判断某个数据存不存在的。原创 2025-03-02 20:37:52 · 1150 阅读 · 0 评论 -
C++22——哈希
unordered_map在线文档说明unordered_map是存储<key,value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值对常用于唯一的标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同在内部,unordered_map没有对<key,value>按照任何特定的顺序排列,为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。原创 2025-03-01 22:44:51 · 1200 阅读 · 0 评论 -
C++21--红黑树
目录1.红黑树的概念2.红黑树的性质3.红黑树结点的定义4.红黑树的结构5.红黑树的插入操作6.红黑树的验证7.红黑树与AVL树的比较4.红黑树的结构1.按照二叉搜索的树规则插入新结点2.检查新结点插入后,红黑树的性质是否造到破坏约定:cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点情况一:cur为红,p为红,g为黑,u存在且为红注意:此处看到的树,可能是一颗完整的树,也可能是一颗子树如果g是根节点,调整完成后,需要将g改为黑色如果g是子树,g一定有双气囊,且g的双亲如果是红色,原创 2025-02-24 19:55:50 · 910 阅读 · 0 评论 -
C++20--AVL树
_bf(0){}//该节点的左孩子//该节点的右孩子//该节点的双亲int _bf;//该节点的平衡因子T _data;原创 2025-02-23 22:50:09 · 986 阅读 · 0 评论 -
C++19--异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了//服务器开发中通常使用的异常继承体系public:,_id(id){}protected:int _id;原创 2025-01-25 21:20:09 · 1220 阅读 · 0 评论 -
C++18--二叉树搜索树
如果我们直接删除,就变得非常困难,于是我们想办法变成b和c的情况,所以就替换值的位置后再删除。替换的值要么是删除结点的左子树最大的结点或者右子树最小的结点)对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种键值对;:二叉搜索树退化为单支树(或者类似单支),其平均比较次数为:N的二次方;1.二叉搜索树的查找。原创 2025-01-17 16:10:54 · 867 阅读 · 0 评论 -
C++17--多态
多态是在不同继承关系的类对象,去调用同一个函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 = 0;则这个函数为纯虚函数。包含纯虚数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。原创 2025-01-12 22:17:33 · 798 阅读 · 0 评论 -
C++16--继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用public:protected://姓名//年龄//继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了Student//和Teacher复用了Person的成员。原创 2025-01-08 22:30:29 · 897 阅读 · 0 评论 -
C++15——模板(浅识)
class 类模板名//类内成员定于//动态顺序表//注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:,_size(0){}//使用析构函数演示:在类中声明,在类外定义~Vector();//注意:类模板中函数放在类外进行定义时,需要加模板参数列表。原创 2024-12-21 18:42:38 · 694 阅读 · 1 评论 -
C++14--内存管理(new delete)
int main()//new/delete和malloc/free最大区别是new/delete对于[自定义类型]除了开空间//还会调用构造函数和析构函数free(p1);delete p2;//内置类型是几乎是一样的free(p3);delete p4;free(p5);return 0;原创 2024-12-20 21:08:23 · 1992 阅读 · 0 评论 -
C++13--内部类 和 对前面类和对象知识的小回顾
内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。原创 2024-12-20 00:00:00 · 412 阅读 · 0 评论 -
C++12--友元
友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。原创 2024-12-19 15:45:51 · 362 阅读 · 0 评论 -
C++11--explicit和static成员
构造函数不仅可以构造与初始化对象,对于接收单个参数的构造函数,还具有类型转换的作用。上述代码可读性不是很好,用explicit修饰构造函数,将会禁止构造函数的隐式转换。实现一个类,计算程序中创建出了多少个类对象?原创 2024-12-19 14:50:00 · 420 阅读 · 0 评论 -
C++10--构造函数之初始化列表
在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,,而不能称为初始化。因为。原创 2024-12-18 21:09:09 · 465 阅读 · 0 评论 -
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
const修饰类成员函数,实际修饰该成员函数。,表明在该成员函数中。原创 2024-12-18 12:25:16 · 725 阅读 · 0 评论 -
C++8--赋值运算符重载
也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数相似。函数名字为:关键字: .原创 2024-12-17 00:01:04 · 1490 阅读 · 2 评论 -
C++7--拷贝构造函数
默认的拷贝构造函数对象按内存存放按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。原创 2024-12-16 00:00:00 · 449 阅读 · 1 评论 -
C++6--析构函数
与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。5.编译器生成的默认析构函数,对自定义类型成员调用它的析构函数。1.一般情况下,有动态申请资源,就要显示写析构函数释放资源。3.需要释放资源的成员都是自定义类型,不需要析构。2.没有动态申请的资源,不需要写析构。什么情况下,我们需要用析构函数?原创 2024-12-15 15:04:39 · 463 阅读 · 0 评论 -
C++5--构造函数
自定义类型就是我们使用class/struct/union等自已定义的类型,看看下面的代码,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。6.关于编译器生成的默认函数,很多人会不解:不实现构造函数的情况下,编译器会生成默认的构造函数,但是看起来默认构造函数又没什么用?7.无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能由一个。是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务。,以保证每个数据成员都有一个合适的初始值,并且。原创 2024-12-15 10:44:43 · 654 阅读 · 0 评论 -
C++4--类
/类体:由成员函数和成员变量组成//一定要注意后面的分号class为定义类的关键字,className为类的名字{}中为类的主体,注意类定义结束时后面分号不能省略类体中内容称为类的成员:类中变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。1.声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。public:public://姓名char* _sex;//性别int _age;原创 2024-12-14 14:00:07 · 520 阅读 · 0 评论 -
C++3--内联函数、auto
当在同一行声明多个变量时,这些变量必须是相同类型,否则编译器会报错,因为编译器实际只对第一个类型进行推导,然后推导出来的类型定义其他变量。原创 2024-12-13 22:10:18 · 1077 阅读 · 0 评论 -
C++2--函数重载和引用
4.如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。1.函数运行时,系统需要给该函数开辟独立的栈空间,用来保存该函数的形参,局部变量以及一些寄存器信息等。,因此用值作为参数或者返回值类型,效率时非常低下的,尤其时当参数或者返回值类型非常大时,效率就更低。上:引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。,编译器不会引用变量开辟内存空间,它和它引用的变量。以值作为参数或者返回值类型,在传参和返回期间,函数。原创 2024-12-13 13:51:04 · 811 阅读 · 0 评论 -
C++1--命名空间、缺省参数
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。//命名空间中可以定义变量/函数/类型int data;//命名空间可以嵌套int a;int b;//3.同一个工程中允许存在多个相同名称的命名空间,// 编译器最后会合成同一个命名空间一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。原创 2024-12-11 23:21:56 · 1274 阅读 · 1 评论