![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 93
张呱呱_
C/C++领域小白,努力中..
展开
-
C++11新特性【下】{lambda表达式、可变模板参数、包装器}
我们无法直接获取参数包args中的每个参数的, 只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特 点,也是最大的难点,即如何展开可变模版参数。包装器也可以包装类成员函数,不过要添加函数所属类域,在c++中一般还要在类名前加一个&,对于静态成员函数,按照函数声明传参即可,对于非静态成员函数,要注意函数存在一个隐藏的this指针,我们可以传一个对象,也可以传一个对象的地址,底层会根据这个对象或者地址从而找到这个函数。C++中的function本质是一个类模板,也是一个包装器。原创 2024-07-02 08:15:00 · 817 阅读 · 2 评论 -
C++11新特性【上】(统一的列表初始化、auto、decltype、右值引用、万能引用、完美转发)
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了 C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。原创 2024-06-10 08:15:00 · 985 阅读 · 6 评论 -
[C++]STL--set与map的封装
set和map的底层原理,如何利用红黑树实现set和map原创 2024-05-20 11:34:11 · 664 阅读 · 1 评论 -
数据结构--红黑树(RBTree)
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,也就是最长路径不超过最短路径的2倍,因而是接近平衡的。思考:在结点的定义中,为什么要将结点的默认颜色给成红色的?原创 2024-05-15 08:15:00 · 593 阅读 · 0 评论 -
数据结构--AVL树
二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查 找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)原创 2024-05-15 08:15:00 · 1873 阅读 · 2 评论 -
【C++】二叉搜索树(手撕插入、删除、寻找)
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b、最多查找高度次,走到到空,还没找到,这个值不存在。2.2二叉搜索树的插入插入的具体过程如下:a. 树为空,则直接新增节点,赋值给root指针b. 树不空,按二叉搜索树性质查找插入位置,插入新节点2.3二叉搜索树的删除首先查找元素是否在二叉搜索树中,如果不存在,则返回, 否则要删除的结点可能分下面四种情况:让父亲节点指向孩子节点的左节点或右节点即可原创 2024-05-08 21:09:06 · 955 阅读 · 2 评论 -
C++面向对象三大特性之---多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上=0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。原创 2024-05-07 09:00:00 · 838 阅读 · 1 评论 -
C++面向对象三大特性之——继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继 承是类设计层次的复用。例如,一个人有名字、年龄等属性,而一个学生也是人,他就可以直接继承人的特性,再加上自己独有的特性即可。原创 2024-05-05 09:00:00 · 1844 阅读 · 2 评论 -
【C++】stack与queue(相关接口介绍、容器适配器、deque、模拟实现)
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。原创 2024-04-17 11:11:12 · 1030 阅读 · 2 评论 -
[STL-list]介绍、与vector的对比、模拟实现的迭代器问题
本文介绍了list常用接口,与vector的比较、迭代器问题以及完整模拟实现代码原创 2024-04-08 12:27:42 · 1457 阅读 · 15 评论 -
STL---Vector常用接口介绍及模拟实现
本文介绍了vector的常用接口,并且讲解了会导致vector迭代器失效的问题,最后自己模拟实现一个简单的vector原创 2024-03-18 14:59:22 · 983 阅读 · 1 评论 -
[C/C++]string类常用接口介绍及模拟实现string类
在C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。string(const string&s) (重点)string(const char* s) (重点)string() (重点)resize (重点)empty (重点)原创 2024-03-10 22:05:20 · 1097 阅读 · 37 评论 -
C/C++内存管理
new/delete 和 malloc/free最大区别是 new/delete对于自定义类型除了开空间还会调用构造函数和析构函数class Apublic:: _a(a)~A()private:int _a;return 0;四. operator new与operator delete函数(重要点进行讲解)4.1 operator new与operator delete函数(重点)new和delete是用户进行动态内存申请和释放的。原创 2024-02-21 16:37:59 · 1096 阅读 · 14 评论 -
[C++]类和对象(下)
回顾默认构造函数,并讲解初始化列表的功能,以及讲述static成员、友元函数、友元类、内部类与匿名对象原创 2024-02-07 13:43:47 · 1276 阅读 · 19 评论 -
[C++]类和对象(中)
详细解答C++类和对象的构造函数、析构函数、拷贝构造函数、运算符重载和赋值重载原创 2024-02-02 17:12:12 · 1788 阅读 · 25 评论 -
[C++]类和对象(上)
在C语言中,struct结构体内部只能定义变量,而C++兼容C语言,结构体内部不仅可以定义变量,还可以定义函数,例如:而在C++中,更喜欢把struct替换为class来定义// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。原创 2024-01-31 08:34:14 · 1739 阅读 · 89 评论 -
C++入门(详细解读,建议收藏)
++是基于C语言而产的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。原创 2024-01-06 21:27:46 · 1895 阅读 · 93 评论