C++
文章平均质量分 89
C++语法
wrf228
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++11 可变参数模版
C++11的新特性可变参数模板,这是一种允许模板函数或模板类接受任意数量参数的特性。可变参数模板极大地增强了模板的灵活性和表达能力,使得编写泛型代码更加方便。)会计算其操作数的值,但只返回最后一个操作数的值(比如:int a = (1,2*2,3);上面的参数args前面有省略号,所以它就是一个可变模版参数,我们把带省略号的参数称为“参数 包”,)来表示参数包(parameter pack),参数包可以包含零个或多个参数。是一个初始化列表,用于创建一个数组。是参数包展开运算符,它将参数包中的每个参数。原创 2025-01-24 22:00:28 · 993 阅读 · 0 评论 -
C++ lambda表达式
Lambda表达式是C++11标准引入的一种匿名函数,它允许你在需要函数的地方直接编写代码块,而无需定义一个完整的函数。Lambda表达式通常用于简化回调函数、简化STL算法的使用等场景。原创 2025-01-24 23:21:15 · 1881 阅读 · 0 评论 -
了解哈希并用线性探测和链地址法解决哈希冲突
顺序结构以及平衡树中,元素在存储结构中的位置与元素的关键码之间不存在直接的对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数。线性探测缺点:一旦发生哈希冲突,所有的冲突连在一起,容易产生数据"堆积”,即:不同关键码占据了可利用的空位置,使得寻找某关键码的位置需要许多次比较,导致搜索效率降低。插入:通过哈希函数获取待插入元素在哈希表中的位置,如果该位置中没有元素则直接插入新元素,如果该位置中有元素发生哈希冲突,使用线性探测找到下一个空位置,插入新元素。原创 2024-12-01 20:24:10 · 1502 阅读 · 0 评论 -
C++11左值引用和右值引用
左值(lvalue)是“左值表达式”(lvalue expression)的简称,它指的是可以出现在赋值操作符左边的表达式,我们可以获取它的地址,一般可以对它赋值(const修饰符后的左值,不能赋值)。特点:持久性:左值通常表示一个对象(如变量、数组元素等),这个对象在内存中有一个固定的存储位置,其生命周期是明确的。可寻址性:左值可以被取地址,因为它们有固定的内存地址。可赋值性:左值可以出现在赋值操作符的左边,表示它可以被赋值。int a = 10;// a 是一个左值。原创 2025-01-22 22:59:06 · 901 阅读 · 0 评论 -
红黑树了解并实现插入操作
/ 节点的颜色enum ColorRED,BLACKColor _col;:_kv(kv){}原创 2024-11-20 21:44:19 · 665 阅读 · 0 评论 -
AVL树的删除方法简单实现
看过前面的AVL树的介绍和插入方法实现,接着可以来学习删除方法的实现。原创 2024-11-16 16:23:21 · 1272 阅读 · 0 评论 -
AVL树了解并简单实现
AVL树就是在二叉搜索树的基础上引入了平衡因子,因此AVL树也可以看成是二叉搜索树。那么按照二叉搜索树的方式插入新节点调整节点的平衡因子平衡因子 = 右子树高度 - 左子树高度插入的新结点newNode在当前结点cur的左子树,平衡因子--插入的新结点newNode在当前结点cur的右子树,平衡因子++是否要往上更新祖先的平衡因子,要看cur的parent结点所在高度是否发生变化。原创 2024-11-15 20:13:44 · 1073 阅读 · 0 评论 -
C++ set和map了解
set是按照特定顺序存储唯一元素的容器。set中元素的值在容器中不能修改一次(元素始终是const),但可以从容器中插入或删除。map中存放的是真正的键值对<key,value>,set中只存放key,set和map底层都是用红黑树来实现的set中的元素不可以重复(因此可以使用set进行去重)T: set中存放元素的类型Compareset中元素默认按照小于来比较Allocset中元素空间的管理方式,使用STL提供的空间配置器管理。原创 2024-10-31 14:45:59 · 789 阅读 · 1 评论 -
二叉搜索树了解和实现
要删除节点3,找左子树中最右的那个结点2替换3结点再将2结点删除 或者 找右子树最左的结点4替换节点3再删除节点4——替换删除,让操作变成上面两种情况。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二 叉搜索树的深度的函数,即结点越深,则比较次数越多。以词库中所有单词集合中的每个单词作为key,构建一棵二叉搜索树在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。删除节点4,让父亲节点6的左指针指向节点4的左孩子或者右孩子(4的左右孩子都为空)原创 2024-10-13 14:53:16 · 920 阅读 · 1 评论 -
C++多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。原创 2024-10-08 20:13:07 · 742 阅读 · 0 评论 -
C++中的继承
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序设计的层次结构。继承是类设计层次的复用。public:protected:// 姓名// 年龄protected:int _stuid;// 学号protected:int _jobid;// 工号学生和老师类都继承了Person类Person是父类,也称作基类。Student是子类,也称作派生类。原创 2024-10-05 16:06:03 · 1066 阅读 · 0 评论 -
了解list并简单实现
根据上图,list基本结构。原创 2024-09-24 18:30:59 · 526 阅读 · 0 评论 -
了解vector并简单实现
如图:size = _finish - _start;_start指向起始位置,_finish指向size位置,_end_of_storage指向capacity位置。对于一些方法,大家可以自己下去尝试使用,这里就介绍一下,后面进行模拟实现,没提及的就不是重点。erase:删除position位置的数据,返回删除位置的下一个元素的迭代器。insert:在position之前插入数据,返回新插入元素位置的迭代器。pop_back:尾删。原创 2024-09-23 19:31:49 · 1107 阅读 · 0 评论 -
模版初步了解
比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<> 中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。2. 代码的可维护性比较低,一个出错可能所有的重载均出错。,对于模板函数的使用,原创 2024-05-22 15:16:09 · 334 阅读 · 0 评论 -
C/C++内存管理
new/delete 和 malloc/free最大区别是:new/delete对于【自定义类型】除了开空间,还会调用构造函数和析构函数new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理。原创 2024-05-21 16:37:06 · 627 阅读 · 1 评论 -
类和对象(下篇)
3. 类静态成员即可用。原创 2024-05-13 11:52:42 · 926 阅读 · 1 评论 -
C++类和对象(中篇3完)
还需要自己实现吗?当然像日期类这样的类是没必要的,但对于Stack类等涉及资源管理就必须要实现(这里跟拷贝构造类似)注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。const对象不可以调用非const成员函数。非const对象可以调用const成员函数。修饰类成员函数,实际修饰该成员函数。这两个默认成员函数一般不用重新定义。,表明在该成员函数中。原创 2024-05-08 09:41:51 · 421 阅读 · 0 评论 -
C++类和对象(中篇2)
3.原创 2024-04-27 17:34:09 · 1550 阅读 · 1 评论 -
C++类和对象(中篇1)
无参的默认构造函数这里把自己显示写的构造函数注释了,在main中创建对象没有报错,下面我们把我们显示写的构造函数放开这里就出错了,Date d1;这里创建对象时调用的是无参构造函数,这里我们显示写了有参的构造函数,编译器就不会默认生成无参构造函数,所以这里找不到无参构造函数就会报错。我们可以在写一个无参构造或用我们前面的知识缺省参数来解决(推荐缺省参数方法)注意:这个类中相当于有两个无参构造函数,Date d1;这个不知道调用无参构造函数,还是缺省构造的函数,调用不明确,所以报错。原创 2024-04-23 10:51:35 · 1960 阅读 · 0 评论 -
C++类和对象(上篇)
class为定义类的键字className为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。接下来我们来看看类的定义不知道各位是否注意到了类的成员变量前面都有一个_,那为什么要这样写呢所以为了区分这样保留了代码可读性,也实现了初始化以上类的定义还差点意思,我们要先了解访问限定符封装、继承、多态。在类和对象刚开始阶段,主要是研究类的封装特性,那什么是封装呢?原创 2024-04-21 11:53:38 · 871 阅读 · 1 评论 -
C++入门开始(第三部分)
C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编 译期会将auto替换为变量实际的类型。原创 2024-04-05 22:59:40 · 1983 阅读 · 1 评论 -
C++入门开始(第二部分)
2. 一个变量可以有多个引用3. 引用一旦引用一个实体,再不能引用其他实体。原创 2024-03-29 18:52:57 · 315 阅读 · 1 评论 -
C++入门开始(第一部分)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。这样就避免了冲突// 变量// 函数// 类型int data;int main()// 特别注意创建结构体变量使用方法return 0;原创 2024-03-28 22:25:28 · 617 阅读 · 1 评论
分享