C++
文章平均质量分 94
每天都要进步呀~
看你骨骼惊奇,天生就能寿司代码
展开
-
【C++修炼之路】33.特殊类设计
拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。C++98将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。原因:C++11C++11扩展delete的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上=delete,表示让编译器删除掉该默认成员函数。二.设计一个类,只能在堆上创建对象1. 普通类的创建对象普通的类,可以在三种位置上创建对象:2.只能在堆上创建对象原创 2023-07-09 21:40:05 · 435 阅读 · 4 评论 -
【C++修炼之路】32.智能指针
boost库是为C++语言标准库提供扩展的一些C++程序库的总称,boost库社区建立的初衷之一就是为C++的标准化工作提供可供参考的实现,比如在送审C++标准库TR1中,就有十个boost库成为标准库的候选方案。原创 2023-07-07 20:03:35 · 345 阅读 · 0 评论 -
【C++修炼之路】31.异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系 class Exception {public :int _id;} };原创 2023-07-06 12:11:47 · 237 阅读 · 0 评论 -
【C++修炼之路】定位new(项目记录)
一般的new运算符负责在heap堆中找到一个足以能够满足要求的内存块。而定位new(Placement new)是C++中的一个操作符,它允许在已分配的内存区域中构造对象。通常,使用new关键字来创建对象时,系统会自动分配内存并在其上构造对象。而定位new则提供了一种在指定的内存位置上构造对象的能力。原创 2023-05-23 14:10:27 · 1119 阅读 · 1 评论 -
【C++修炼之路】30.可变参数模板&&包装器
在学习C语言时,就有过这种可变的参数数量的函数,即我们耳熟能详的scanf和printf,因为其可以传任意数量的参数:而对于C++11来说,C++11使这个特性实践的更加广泛。C++11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以这块还是比较晦涩的。现阶段,我们掌握一些基础的可变参数模板特性就够我们用了。原创 2023-05-20 12:37:23 · 908 阅读 · 4 评论 -
【C++修炼之路】29.lambda表达式
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法,如果待排序元素为自定义类型,需要用户定义排序时的比较规则,这个比较规则既可以是我们C语言时的函数指针,也可以是C++中的仿函数,,下面的例子就是利用仿函数的方式。// 名字 double _price;// 价格 int _evaluate;原创 2023-03-19 15:16:12 · 611 阅读 · 6 评论 -
【C++修炼之路】28.新的类功能
这一篇仍是C++11中新增的内容。原创 2023-03-18 21:00:51 · 382 阅读 · 1 评论 -
【C++修炼之路】27.右值引用
以下所要讲到的,以及右值引用的都是为了提高性能,这是其他语言所不具备的,而本文章就围绕了大量的场景将右值引用的细节分割并逐个击破。左值引用是取别名,直接起作用。右值引用是通过实现移动构造和移动赋值,在拷贝的场景中,如果是右值(将亡值),则进行资源的转移,这是间接起作用。在C++11的标准中,vector以及其他类型的容器的构造函数中,也都出现了新的函数接口:这里只贴了两种常见的容器,对于其他容器,也都有这一新接口。return 0;这是当然的,学这么长时间岂是白学?原创 2023-03-12 09:17:15 · 551 阅读 · 9 评论 -
【C++修炼之路】26.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年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2023-03-08 20:44:07 · 751 阅读 · 0 评论 -
【C++修炼之路】25.哈希应用--布隆过滤器
上一节中,我们学到了位图,可以看出位图有如下优点:1.节省空间。2.快。但相对的,位图同样有缺点存在:1. 一般要求范围相对集中,如果范围特别分散,空间消耗就会上升。2. 只能针对整形那如果此时是字符串类型,能不能通过位图的思想来确定字符串在不在呢?原创 2023-03-05 14:47:05 · 789 阅读 · 8 评论 -
【C++修炼之路】24.哈希应用--位图
每一个不曾起舞的日子都是对生命的辜负哈希应用--位图。原创 2023-03-04 19:50:02 · 642 阅读 · 11 评论 -
【C++修炼之路】23.哈希封装unordered系列
unordered_map、unordered_set与map、set的区别是unoedered系列无序,除此之外功能上没有区别。但二者之间底层不同,前者底层为哈希,后者为红黑树。之前所学到的红黑树封装map和set时,为了map和set能够共用一套红黑树结构,我们将红黑树的参数类型以及模板数量类型进行的改良,增加一个能够读取参数相应大小的仿函数KeyOfT,对于这次的封装,同样采用这种方式。原创 2023-03-03 21:07:21 · 367 阅读 · 2 评论 -
【C++修炼之路】22.哈希
每一个不曾起舞的日子都是对生命的辜负哈希。原创 2023-02-28 15:44:16 · 645 阅读 · 11 评论 -
【C++修炼之路】21.红黑树封装map和set
上一节中,说到了红黑树的实现,并且已经知道map和set的底层共用了同一套红黑树的结构。但这样就会出现一个问题,map的数据域和set不一样,比较大小的方式自然也就不一样。因此上一篇中的红黑树还需要做出一些改变才能用来实现map和set。原创 2023-02-20 12:44:38 · 726 阅读 · 0 评论 -
【C++修炼之路】20.手撕红黑树
在上一节中我们学到了AVL树的结构及其相关性质,对于平衡树来说,AVL无疑是最完美的结构,但实际上AVL树由于完美的结构因此也要花费一定的代价,由于AVL树的结构很敏感,查找虽然最快,但插入节点后一旦偏离AVL结构就会进行旋转,而旋转就会花费一定的性能。因此我们提到的map和set的底层为了防止这种性能上的缺失,即便AVL是非常完美的结构,也不采用AVL。而是采用我们这节所要描述的红黑树。相比较AVL树,红黑树的结点仍是三叉链这个结构,为后续不满足结构的条件旋转做准备。原创 2023-02-20 12:40:54 · 3159 阅读 · 1 评论 -
【C++修炼之路】19.AVL树
前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。平衡树有AVL树、红黑树,本篇就来了解一下AVL树。对于AVL树,相比普通的二叉搜索树,最主要的就是多了一个平衡因子保持AVL高度平衡的结构。原创 2023-02-20 12:28:50 · 573 阅读 · 1 评论 -
【C++修炼之路】18.map和set
set的底层为二叉搜索树,也就是上一节中所实现的,不过在此之上,set作为容器来说,封装了和以前的vector、list、deque相关的迭代器、运算符重载等,方便我们去进行一系列的操作。可以发现,这与之前我们所学的容器的方法几乎差不多。set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。原创 2023-02-20 12:19:17 · 728 阅读 · 3 评论 -
【C++修炼之路】17.二叉搜索树
二叉搜索树。原创 2023-02-07 16:32:43 · 676 阅读 · 9 评论 -
【C++修炼之路】16.C++多态
本文讲述了:多态的概念、多态的定义及实现、虚函数、抽象类、多态的原理、单继承和多继承关系的虚函数表、以及虚表指针的具体内容。原创 2023-02-04 20:03:50 · 739 阅读 · 12 评论 -
【C++修炼之路】15.C++继承
本文详细介绍了:继承的概念、基类和派生类对象赋值转换、继承中的作用域、派生类的默认成员函数、继承与友元、继承与静态成员、复杂的菱形继承及菱形虚拟继承、继承与组合的区别。原创 2023-02-02 15:43:49 · 916 阅读 · 21 评论 -
【C++修炼之路】14.模板进阶
注意包括非类型模板的特化:全特化、偏特化。原创 2023-01-28 17:17:03 · 505 阅读 · 14 评论 -
【C++修炼之路】13. priority_queue及仿函数
priority_queue文档介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。原创 2023-01-27 16:16:24 · 797 阅读 · 8 评论 -
【C++修炼之路】12. stack && queue类
stack的文档介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作pop_back:尾部删除元素操作。原创 2023-01-03 17:30:06 · 641 阅读 · 14 评论 -
【C++修炼之路】11. list类
本节将会讲述list的使用,以及list的底层实现,对于底层实现,list的底层就是我们之前学过数据结构中的链表,因此这就与vector的结构相差很大,迭代器的部分也与vector有很大差别,迭代器的相关内容极为重要,也是本节的难点;此外也会有vector与list两者之间进行对比,下面开始正文。注:本文的模拟实现会贯穿全文而不是集中在某一小节对于list类来说,其中的大多数函数功能都与string、vector相同,大部分实用的成员函数也是非常相似,因此我们在这里也是简单明了的查看文档:list文档 。通原创 2022-12-09 16:39:24 · 614 阅读 · 9 评论 -
【C++修炼之路】10. vector类
vector的文档介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是。原创 2022-12-02 22:15:51 · 584 阅读 · 12 评论 -
【C++修炼之路】9. string类的模拟实现
本篇文章是衔接上一篇string,进行string的模拟实现,其中包含了众多重载函数,以及一些实现的细节,由于上篇已经知道具体函数的含义,这一篇就以纯代码的方式进行叙述。此外,这篇还对内置类型的知识进行了进一步的扩展。此篇文章不长,大多通过直接展示代码的形式介绍了string内部函数的模拟实现,此外又添加了template的扩展知识,希望对你有所帮助。原创 2022-11-16 14:04:43 · 979 阅读 · 18 评论 -
【C++修炼之路】8. string类详解
详细介绍了关于string的各个函数的使用方法并举例实现。原创 2022-11-03 16:51:21 · 767 阅读 · 17 评论 -
【C++修炼之路】7. 模板初阶
介绍了什么是泛型编程、以及函数模板、类模板的应用原创 2022-10-19 15:37:18 · 966 阅读 · 18 评论 -
【C++修炼之路】6. 内存管理
本文详细介绍了内存管理的相关知识以及拓展。原创 2022-10-18 14:20:29 · 2659 阅读 · 24 评论 -
【C++修炼之路】5. 类和对象(下)
讲述了类和对象剩余的内容:再谈构造、static、友元、内部类、匿名对象、编译器的优化等。原创 2022-10-14 22:43:27 · 684 阅读 · 19 评论 -
【C++修炼之路】4. 类和对象(中):日期类实现
详细讲解了日期类的实现,并在此过程中叙述了一系列问题原创 2022-10-13 15:50:20 · 989 阅读 · 22 评论 -
【C++修炼之路】3. 类和对象(中)
详细介绍了六大默认成员函数中最重要的四大函数,分别是:构造函数、析构函数、拷贝构造函数、运算符重载!原创 2022-10-09 20:38:59 · 577 阅读 · 28 评论 -
【C++修炼之路】2. 类和对象(上)
1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装5. 类的作用域6. 类的实例化7. 类的对象大小的计算8. 类成员函数的this指针原创 2022-09-23 20:39:09 · 1548 阅读 · 28 评论 -
【C++修炼之路】1. 初窥门径
修炼之路1:修炼命名空间、缺省参数、函数重载、引用、内联函数、auto、循环、nullptr等。原创 2022-09-20 14:59:02 · 1217 阅读 · 26 评论