分类标签归档:C++

B树 B+ 树


B树

B树和B-树,我个人觉得是一个概念 为什么要有B树出现的,首先我们得明白二叉树,当内存存不下的时候需要存储到磁盘里面,如果有1024个节点,大概需要10层到11层,寻址次数比较多, 多叉树是B树的基础,B树是有限制的二叉树,》》》所有的叶子节点在统一的高度上面

BTree

一个M阶B树T,满足以下节点 1. 每个节点至多M棵子树 2. 根节点至少拥有两个子树 3. 除了根节点,其余每个分支节点至少有M/2棵子树 4. 有K棵子树的分支节点则存在k-1个关键字,关键字按照递增的顺序进行排序 5. 所有的叶节点都在同一层 6. 关键字数量满足ceil(M/2)-1<=n <=M

Read more

关于extern "C",关于C++对象内存模型


extern "C" 主要作用是为了正确实现C++ 代码调用C语言代码,加上extern"C"后,编译器识别到关键字之后会按照C语言的方式来编译,当然C++支持函数重载,所以编译器编译函数的过程会将函数的参数类型和函数名字也加到编译后的代码中,但是C语言不支持函数重载,所以编译C语言代码的函数是不会带入函数的参数类型,只会带入函数名字。 注意的是,按照C语言方式编译,采取一种和 C兼容的语言。

extern

  1. extern 告诉编译器,其声明的函数和变量可以在本模块或者其他模块中使用,
  2. 其方式是在模块的头文件中对本模块提供给其他模块引用函数和全局变量以关键字extern 声明。
  3. 例如当模块B引

Read more

指针和引用,malloc/free, new和delete


指针和引用

本质含义:

指针是一个变量,内部存储着内存地址,指向内存中的某个位置,通过指针,我们可以间接地引用和操作内存中的数据。 引用只是一个别名,是一个已经存在变量的别名,引用和原变量共享同一个内存地址,因此对引用的操作实际上是对原变量的操作。

定义和声明:

指针需要特定的语法定义和声明,*号表示指针类型,需要使用取地址符&来获取变量的额地址。 引用& 来表示引用类型,通常在声明时直接给引用赋值。

空值以及可变性:

指针可以具有空值(null),即指向空地址或者未初始化的指针,指针的值可以修改,可以重新分配给其他地址。 引用必须在声明的时候进行初始化,不能为空,一旦引用被初

Read more

关于对C++ 类的一些操作


只能在堆上生成

为什么需要类只在堆上生成

一般来说,栈是存储局部变量和方法调用的一种内存区域,而堆事用于动态分配内存的另一种内存区域。主要原因有几点

  1. 对象生命周期:在堆上创建对象可以延长其生命周期。堆上的对象不会受限于其所在方法或作用域的接受。相反,他们在方法结束之后可以先继续存在,并且可以在其他部分使用,适合于多个方法或者多个对象之间需要共享数据。
  2. 动态大小:堆允许动态分配对象的大小,在堆上创建对象的时候,可以根据需要分配内存,适合于处理链表或者树之类的动态数据结构或者变长数据。
  3. 对象共享:在堆上创建对象可以实现对象共享。多个对象可以引用相同的堆对象,节省内存。适合于需要复制大量数据。

Read more

关于对象的一些特性


关于三五原则

一个类通过定义三种特殊成员函数来控制这些操作:拷贝构造,拷贝赋值,析构函数。

拷贝构造函数

一般来说对于普通对象,赋值和复制比较简单,对于类对象,由于其内部结构复杂,存在各种成员变量,需要专门的拷贝构造函数,如果没有拷贝构造函数,那么编译器会自动帮我们定义实现一个构造函数。

使用场景

  1. 值传入 ,需要创建一个临时对象,有赋值操作。
function (Object obj){}
  1. 在函数体内部构建的类对象返回,类对象返回后是直接赋值操作
Object function(){
 Object obj;
 return obj
}
  1. 一个对象需要另外一个对象初始化,直接赋

Read more