![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 95
C++学习
不是我衰
这个作者很懒,什么都没留下…
展开
-
C++之类型转换
在C语言中, 如果, 或者, 或者不一致时, 就需要发生类型转化, C语言中总共有两种形式的类型转换:隐式类型转换和显式类型转换1. 隐式类型转化是, 意义相近的类型之间的转换, 编译器在编译阶段自动进行, 能转就转, 不能转就编译失败,2. 显式类型转化是的类型, 需要用户自己处理.转换的可视性比较差, 所有的转换形式都是以一种相同形式书写, 难以跟踪错误的转换。原创 2024-03-06 21:53:30 · 909 阅读 · 0 评论 -
C++之智能指针
前面我们知道使用异常可能会导致部分资源没有被正常释放, 因为异常抛出之后会直接跳转到捕获异常的地方从而跳过了一些很重要的的代码, 比如说下面的情况:无异常抛出正常内存释放: 有异常抛出, 内存泄漏: 为了解决这个问题就可以异常重新抛出, 在func函数里面添加捕获异常的代码, 然后在catch里面对资源进行释放最后重新将异常进行抛出, 最后交给main函数中的catch进行处理, 比如说下面的代码: 无论除零是否有异常都会正常释放资源: 但是这么写就完成正确了吗? 肯定没有, 因为new本原创 2024-03-05 10:20:42 · 1120 阅读 · 0 评论 -
C++之异常处理
实际中都会自定义自己的异常体系进行规范的异常管理, 因为一个项目中如果大家随意抛异常, 那么外层的调用者就没办法处理了, 所以实际中都会定义一套继承的规范体系.这样大家抛出的都是继承的派生类对象, 捕获一个基类就可以了如果每个小组分别负责数据库模块, 缓存模块, 业务模块, 每个小组都会抛出异常, 但是每个小组抛出的异常类型又不同, 如果一起在main函数里面进行捕捉的话就会非常的多并且非常的复杂, 并且每个小组所抛出的异常都有着自己的模块的属性, 所以使用一个类来解决这里的异常就不现实.原创 2023-12-09 19:00:41 · 1115 阅读 · 0 评论 -
C++11(下)
总体而言emplace的效率并没有比push_back高多少, 但是有一种场景提升比较明显, 对于浅拷贝而且是对象很大的类有效果, 因为浅拷贝push_back不存在移动构造(不存在资源转换), 就是构造+拷贝构造, 而emplace是直接构造, 直接构造肯定比构造+拷贝构造效率高, 所以emplace对于深拷贝的类效果不是很明显, 因为移动构造的成本就是转移资源, 成本很低;对于浅拷贝的类有一定的提升.原创 2023-12-07 20:44:47 · 1161 阅读 · 0 评论 -
C++11(上)
1.左值引用只能引用左值, 不能引用右值.2. 但是const左值引用既可引用左值, 也可引用右值.右值引用:1. 右值引用只能引用右值, 不能引用左值.2. 但是右值引用可以move以后的左值.所以其实左值引用其实既可引用左值, 也可引用右值(加const就行了), 那为什么要有右值引用.原创 2023-12-04 18:23:09 · 1009 阅读 · 0 评论 -
哈希的应用——位图
1.暴力查找:数据量大了, 效率就低.2.排序 + 二分查找问题a: 排序有代价问题b: 数组不方便增删3.引申出->ALV树和红黑树, 性能整体比较稳定, 插入不会有太大波动.4.哈希:搜索比较快, 但是整体不稳定, 插入是有波动的, 某次的插入可能需要扩容, 扩容代价比较高还有极端场景下某个桶的数量可能很高, 但可以改挂红黑树解决.以上数据结构, 空间消耗很高.对于数量很大的数据的场景?5、[整形]的是否存在及其扩展问题--位图及变形节省空间, 但是位图的局限是只能处理整型6、[原创 2023-11-27 23:10:14 · 164 阅读 · 0 评论 -
C++之哈希
以及。原创 2023-11-27 19:50:30 · 162 阅读 · 0 评论 -
C++之模板
class 类模板名// 类内成员定义public:_top = 0;类模板实例化与函数模板实例化有些不同,类模板实例化只能显式实例化,即需要在类模板名字后跟,然后将实例化的类型放在中即可。Stack是类名,Stack才是类型。这样我们就可以让不同的栈对象里面存不同类型的数据了。原创 2023-10-13 20:20:12 · 48 阅读 · 0 评论 -
C++之反向迭代器
那reverse_iterator这个类模板的实现其实是在另一个头文件。原创 2023-10-13 22:19:01 · 37 阅读 · 0 评论 -
数据结构之二叉树OJ(C++)
题目的要求是给我们一棵二叉树,让我们用前序遍历的方式把它转换成一个由整数和括号组成的字符串。我们观察它给的用例会发现其实整数就是每个结点的值,括号其实是把每棵树的左右子树括起来。另外还要求但是又不能无脑的全部省略掉,省略后不能影响字符串与原始二叉树之间的一对一映射关系。所以我们可以先来分析一下,哪些情况需要省略空括号,哪些情况不能省略那对照着图我们很容易得出,括号的处理应该是这样的:1.根结点不为空的情况对应子树的括号肯定不省略2.左不为空,左子树的括号一定不省略3.左为空。原创 2023-11-10 21:01:21 · 516 阅读 · 0 评论 -
C++之map和set模拟实现
在map和set的使用文章中提到了C++STL中的map和set的底层其实就是用的红黑树来实现的,所以可以用来一下STL中的map和set.原创 2023-11-16 16:31:32 · 64 阅读 · 0 评论 -
map和set的例题
我们为什么要拷贝原链表的结点一个个链接到原链表结点的后面?其实就建立了方便我们设置拷贝结点的random域。那我们现在C++有了map:1.首先我们定义一个map,然后遍历原链表,依次拷贝结点,在map中建立源节点与拷贝结点的映射,并链接拷贝链表.2.然后, 再遍历原链表用来设置拷贝结点的random域:如果源节点的random指向空,那么拷贝结点random也指向空;如果源节点不指向空,那拷贝结点就指向。原创 2023-11-05 16:00:03 · 82 阅读 · 0 评论 -
C++之unordered_map/set的使用
前面我们已经学习了STL中底层为红黑树结构的一系列关联式容器——set/multiset 和 map/multimap(C++98).原创 2023-11-24 19:03:51 · 1035 阅读 · 0 评论 -
C++之set/multiset 和 map/multimap的使用
1. set是按照。原创 2023-11-05 12:47:51 · 63 阅读 · 0 评论 -
C++之多态
在虚函数的后面写上=0,则这个函数为纯虚函数(不需要函数体)包含纯虚函数的类叫做抽象类,抽象类不能实例化出对象。(这里的包含是只要包含就是抽象类,哪怕类中还有其它的成员)派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写(不重写就不能实例化),另外纯虚函数更体现出了接口继承。class Carpublic:这里的Car这个类就是一个抽象类,因为它包含纯虚函数,所以,Car这个类不能实例化出对象如何理解抽象类?原创 2023-10-25 19:53:00 · 68 阅读 · 0 评论 -
C++之继承
那在继承体系中,如果出现这种情况,即子类和父类中有同名成员,它有一个专属的称谓,叫作隐藏或者重定义.子类和父类中有同名成员,子类成员将屏蔽对父类同名成员的直接访问(默认访问到的是子类的那一个),这种情况叫隐藏,也叫重定义.(在子类成员函数中,可以使用 基类基类成员 显示访问)如果是出现同名的成员函数呢?子类和父类有同名成员,构成隐藏。但是这两个函数的函数名确实相同,但是参数不同啊,那这不是函数重载的一种情况吗。那这里到底是函数重载还是隐藏啊?函数重载是有前提的,函数重载要求在同一个作用域里面。原创 2023-10-18 21:38:55 · 111 阅读 · 0 评论 -
stack的oj题
我们正常写的表达式,就比如题目中的这个:(2 + 1) * 3这种写法叫做。原创 2023-10-14 16:56:43 · 37 阅读 · 0 评论 -
C++之栈与队列
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。无论是电脑、手机还是其它电器,充电时都无法直接使用 220V 的交流电,为了方便用户使用,各个电器厂商都会提供一个适用于自己产品的电源线,它可以将 220V 的交流电转换成适合电器使用的低压直流电。从用户的角度看,电源线扮演的角色就是将原本不适用的交流电变得适用,因此其又被称为电源适配器。原创 2023-10-11 17:26:23 · 893 阅读 · 0 评论 -
C++之list
迭代器像是模仿指针的行为,因为指针的++--!=等操作可能不适用该数据结构,所以用迭代器封装指针重载运算符去模仿指针的行为。原创 2023-09-24 17:10:30 · 150 阅读 · 1 评论 -
C++之Vector
对于vector可能会导致其迭代器失效的操作有:1.原创 2023-09-23 19:59:26 · 210 阅读 · 1 评论 -
C++之string模拟实现与string的补充
我们知道,那确定了它的结构,接下来我们就开始模拟实现它。_str_size_capacity'\0'现在是要自己实现一个string类,而标准库里面已经有string类了。所以,为了避免冲突,我们可以定义一个命名空间,把我们自己实现的string放到我们自己的命名空间里面。构造函数与析构函数。原创 2023-09-18 23:03:11 · 47 阅读 · 0 评论 -
C++之string
1. string是表示字符串的字符串类2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3. string在底层实际是:basic_string模板类的别名,typedef basic_string string;4. 不能操作多字节或者变长字符的序列。原创 2023-09-16 10:37:11 · 182 阅读 · 1 评论 -
C++之STL简介
STL,不仅是一个可复用的组件库,Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。HP 版本--所有STL实现版本的始祖。由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。原创 2023-09-12 16:08:20 · 39 阅读 · 1 评论 -
C++之内存管理
C++发明new和C语言的malloc这些对于内置类型的操作好像除了用法之外也没有什么很大的区别。但C++发明这些东西更多的是为了自定义类型。int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);原创 2023-09-10 20:58:20 · 39 阅读 · 1 评论 -
C++之类和对象
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。int _month;原创 2023-09-10 08:59:37 · 117 阅读 · 1 评论 -
C++之入门
定义命名空间,需要使用到namespace关键字,后面加命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。//1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;2. 命名空间可以嵌套int main()//一个地址//0//10return 0;3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个// test.h。原创 2023-08-29 20:55:38 · 52 阅读 · 1 评论 -
C++之引言
1、原创 2023-07-20 20:39:55 · 124 阅读 · 1 评论