![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 87
ljp_nan
一个普普通通的大学生
展开
-
数据结构-二叉树-红黑树
当父亲是黑色的时候,插入红色节点没有违背任何的条件,如果当父亲是红色的时候,就违背了一个节点是红色的它的左右孩子都是黑色的条件。红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因为是接近平衡的。根是黑色的,NIL是黑色的,如果一个节点是红色的,那么它的左右孩子都是黑色,不同的路径上有相同数量的黑色节点。3、如果一个节点是红色的,则它的两个孩子节点必须是黑色的。原创 2024-05-12 16:01:23 · 441 阅读 · 0 评论 -
C++------vector【STL】
1、vector是表示可变大小数组的序列容器。2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3、本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。原创 2023-09-03 18:01:32 · 503 阅读 · 0 评论 -
C++------map和set的使用
与map/multimap不同,map/multimap中存储的是真正的键值对<key,value>,set中只存放value,但在底层实际存放的是由<value,value>构成的键值对。set中插入元素时,只需要插入value即可,不需要构造键值对。set中的元素不可以重复(因此可以使用set进行去重)。使用set的迭代器遍历set中的元素,可以得到有序序列set中的元素默认按照小于来比较log2nlog_2 nlog2nset中的元素不允许修改。原创 2023-08-29 20:11:30 · 920 阅读 · 0 评论 -
C++------利用C++实现二叉搜索树【数据结构】
算法思想:二叉搜索树的查找算法是这样的,从根的地方开始找,如果要找的key比根大就到右子树去找,如果比根小就到左子树找。我们要使树的高度保持为logN就必须引入平衡二叉搜索树的概念,这个部分我们在后面的AVL和红黑树部分讲解。情况d:在它的左子树中寻找最大节点,用它的值填补到被删除节点中,再来处理该节点的删除问题—替换法删除。情况b:删除该节点且是被删除节点的双亲节点指向被删除节点的左孩子节点—直接删除。情况c:删除该节点且是被删除节点的双亲节点指向被删除节点的右孩子节点—直接删除。好的我们下一篇再见!原创 2023-08-20 12:00:32 · 576 阅读 · 1 评论 -
C++ ------ new关键字和delete关键字
new的原理调用operator new函数申请空间在申请空间上执行构造函数,完成对象的构造delete原理在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间new T[N]的原理调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请在申请的空间上执行N次构造函数delete[]的原理在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。原创 2023-08-05 20:11:31 · 273 阅读 · 1 评论 -
C++ ------ 类和对象的深究
上面的代码虽然在每次实例化对象是都给每个成员变量设定了初始值,但这并不是初始化,构造函数体内的语句只能将其称为赋初值,并不是初始化,因为初始化成员变量只能初始化一次,而构造函数可以给成员变量多次赋值,所以怎么样才能对成员变量初始化呢,这里引出了初始化列表的概念。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量,用static修饰的成员函数,称之为静态成员函数。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。原创 2023-08-03 20:21:49 · 177 阅读 · 0 评论 -
C++ ------ 模板初阶
这样写就显得我们不太聪明的样子,这样写的缺点是:重载的函数仅仅是类型不同,代码复用率较低,只要有新类型出现时,就需要用户自己增加对应的函数。上面的代码运用了函数模板的概念,template是C++中提供函数模板参数的一个关键字,上面就是一个交换函数的函数模板,该函数可以适应很多类型的数据交换。函数模板只是一个模板,它本身不是函数,是编译器使用方式产生特定具体类型函数的模具。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,更具实参类型产生函数的特定类型版本。模板可以分为函数模板和类模板。原创 2023-07-31 14:10:37 · 98 阅读 · 0 评论 -
C++ ------类和对象详解六大默认成员函数
上面的代码在构造d1对象时使用了构造函数,在给类类型形参传参的时候调用了一次拷贝构造,在用d构造temp对象时使用了一次拷贝构造,在返回temp对象时调用了一次拷贝构造,程序运行结束后销毁Test中的temp对象使用了一次析构函数,销毁Test函数的参数d使用了析构函数,销毁Test函数返回时创建的临时对象使用了一次析构函数,销毁main函数中的d1使用了一次析构函数。我们就引出了析构函数的概念。析构函数:析构函数和构造函数的功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。原创 2023-07-30 22:08:01 · 192 阅读 · 0 评论 -
C++类和对象 ------ 简单介绍类和对象,this指针
/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号需要注意的地方class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。原创 2023-07-22 17:53:18 · 53 阅读 · 0 评论 -
初识C++ ------ 引用、内联函数、auto关键字、基于范围的for循环、指针空值
但是,C++编译器是十分聪明的并不会把所有的函数去在调用的地方展开,这是因为如果函数语句较多的话,比如我们调用100次,每次调用的函数里有100句代码,我们就会发现如果全部展开就会发生程序冗余的问题有(10000行代码),这对代码的运行效率是极为不友好的。以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时拷贝,因此用值作为参数或者返回类型,效果时非常底下的,尤其是当参数或者返回值类型非常大时,效率就很低。auto不能作为函数的参数。原创 2023-07-22 15:56:04 · 57 阅读 · 0 评论 -
初识C++——关键字,输入输出,函数名修饰,引用
在这里我们需要注意的是,在编译阶段编译器会生成符号表,符号表的内容为函数名+函数地址的映射,这可以使我们方便的跳转到函数体执行函数体的语句,但是在C++中,引入了重载函数,这就需要在符号表中添加一些规则使得相同函数名的函数可以被区分出来。C++的常用关键字一共有63个,其中包括有C语言的关键字,这些关键字我们在后面的文章中都会讲到,大家可以在以后的文章中看到这些关键字,所以没有必要在这里记住这些关键字。我们需要了解 一个C++程序时如何运行起来的,这里和C语言是相应的。使用案例,通过引用修改数组空间的值。原创 2023-07-21 11:31:18 · 366 阅读 · 1 评论 -
c++ ——命名空间、缺省函数、函数重载
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存。使用命名空间的目的是对标识符的名称进行本地化,缺省参数是声明或定义函数时为函数的参数指定一个缺省值。自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重。:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这。以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。”,后者是“谁也赢不了!简单一句话命名空间是用来避免命名冲突或者名字污染的。原创 2023-07-16 20:09:34 · 173 阅读 · 1 评论