自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 数据结构——二叉树

树是什么?简单来说,它是一种数据结构,就如单链表来说,每个节点都至少有这几个点;数值、后继节点指针、(有时候会有前驱结点指针);对于树来说,也是每个节点按照不同于链表连接方式连接;首先看一张图,也就是下面所要讲解所有代码都要用的例子;这个图可以看出一个最基本的二叉树节点,至少含有;一个值、一个左孩子、一个右孩子;其他的树比如,T树、红黑树、B+树、B-树、等也就是对该节点的扩充,但是重要的是整体模型还是如此;对于树的来说,就是对树节点的连接不同;

2023-09-09 10:47:14 108 1

原创 数据结构——八大排序

堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如图所示:

2023-09-08 20:39:23 146 1

原创 deque的介绍

当需要在容器的两端添加或删除元素时,deque只需要操作与该端相邻的内存块,而不需要改变整个序列的内存布局,因此它的效率相对较高。当vector的大小增加时,它会尝试在内存中分配更多的连续空间来存储新的元素,如果当前内存块不足以容纳新的元素,则需要重新分配更大的内存块,并将原有元素复制到新的内存块中去,这是一个比较耗时的操作。2.deque的最大任务,便是在这些分块的固定大小的连续空间上,维护其整体的连续的假象,并提供随机存取的接口( 随机迭代器),代价则是迭代器架构较为复杂。

2023-06-14 21:34:35 285

原创 List的介绍

1.list是序列容器,允许在序列中的任何位置执行固定的O(1)时间的插入和删除操作,并在两个方向上进行迭代。2.list容器使用双链表实现:双链表将每个元素存储在不同位置,每个结点通过next,prev指针链接成顺序表。3.list与其他序列容器相比(array,vector和deque),list在容器内任何位置插入,提取和移动元素(已经获得迭代器的情况下时间渐进复杂度为O(1))

2023-06-14 16:35:28 782

原创 VECTOR

容器中进行对象的构造和析构1,内存开辟和释放,都是通过容器的空间配置器allocator(负责内存开辟)和deallocator(负责内存释放),construct(对象构造),destory(对象析构)。需要注意的是reserve()函数给vector预分配储存大小,但没有给这段内存初始化,导致vector可以利用这段存储空间,但并不能有效访问这些空间,如果访问就会出现越界现象,导致程序奔溃。在初始化后迭代器还能使用,,再push_back()后空间扩容,之前的对象会被析构掉,迭代器失效。

2023-06-12 17:51:38 78 1

原创 C++STL

修改算法:copy、copy_if、copy_n、fill、fill_n、generate、generate_n、replace、replace_if、remove、remove_if、unique等。1.输入迭代器(Input Iterator):支持单向迭代,只能读取,不能修改,每个元素只能被遍历 一次。查找算法:find、find_if、count、count_if、binary_search、lower_bound、upper_bound、equal_range等。

2023-06-11 20:43:35 56 1

原创 weak_ptr

weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,即就是将一个weak_ptr绑定到shared_ptr不会改变shared_ptr的引用计数。不论是否有用weak_ptr指向一旦最后一个指向对象的shared_ptr被销毁,对象就会是释放。从这个角度看,weak_ptr更像是一个shared_ptr的助手,weak_ptr并不拥有对对象的管辖权,weak_ptr指向shared_ptr的目标也不会增加计数器值。

2023-06-11 17:14:35 1121 1

原创 shared_ptr

2.在赋值前要先将自生的资源移交出去,即就是将自身指向的引用计数减一,如果减一后引用计数为0,那么就调用删除器将资源删除,表示没有指针指向当前资源。2、当任何shared_ptr对象超出作用时,则在器析构函数中,将与资源对象关联的引用计数变为0,则表示没有其他shared_ptr对象与此资源对象关联,在这种情况下榻使用delete删除器删除该资源对象。析构的是当前指针,先判断是否为空,再引用计数减一,如果结果为0,则调用删除器先删除引用计数所致的对象,在删除指针。

2023-06-10 11:30:00 2131

原创 unique_ptr 删除器

1.首先,模板给出两个参数,一个是要指向对象类型,另一个是删除器类型,这个删除器是泛 化版本删除器。4.在析构函数中,如果指针不为nullptr,则调用删除器,并将指针指向nullptr。3.模拟unique_ptr的特性,不能拷贝构造和赋值构造,所以将这两个函数删除。在这个模板类中,实现其删除仿函数,实现的是可以删除单独的堆区对象。2.私有成员有两个,一个是指针,一个是删除器成员。构造的指针可以指向多个参数的对象,再构造时传入的参数可变。让当前指针指向函数传递进来的参数所指向的对象;

2023-06-10 10:30:00 306

原创 Unique_ptr

一、unique_ptrunique_ ptr实现了独享被管理对象指针的概念,这意味这它可确保一个对象和其对应的资源同一时间只被一个unique_ ptr对象拥有。一旦拥有者 被销毁或者变成empty或者开始拥有另一个对象的地址,先前拥有的那个对象就会被销毁,其任何相应资源亦会被释放。1、unique_ptr对象不能进行复制操作只能进行移动操作。2、unique是独特的、唯一的意思,故名思议,unique_ptr可以\"独占\"地拥有它所指向的对象。

2023-06-10 10:15:00 813

原创 C++:什么是RAII?|智能指针

这里的资源主要是指操作系统中有限的东西如内存(heap)、网络套接字,互斥量,文件句柄等等,局部对象是指存储在栈的对象,它的生命周期是由操作系统来管理的,无需人工介入。从该示例可以看出,当我们在fun函数中声明一个局部对象的时候,会自动调用构造函数进行对象的初始化,当整个fun函数执行完成之后,自动调用析构函数来销毁对象,整个过程无需人工介入,由操作系统自动完成,于是自然联想到,当我们在使用资源的时候,在构造函数中进行初始化,在析构函数中进行销毁。智能指针虽然很智能,但容易被误用,智能也是有代价的。

2023-06-10 10:00:00 2790

原创 C++:C和C++的区别

当调用这个函数时,编译器会根据传递的参数类型和数量来选择正确的函数进行调用。默认值参数是C++函数特性之一,它允许函数在定义时就为全部或部分参数提供默认值,当调用函数时,如果调用语句省略了这些参数的值,则使用其默认值。最后,如果内联函数被频繁调用,编译器可能将会忽略 inline 关键字,而将该函数作为普通函数进行处理,因此内联函数的效果可能得不到保证。C 编译器不支持函数重载,因此它使用了简单的名称修饰方式,即在函数名前加一个下划线,并在参数列表后面加上一个数字,来区分不同的函数。

2023-05-29 22:57:29 22

原创 2021-10-13

1.c源文件—.i预编译文件.obj目标文件.exe可执行文件二,C源程序的结构特点1.一个C语言源程序可以由一个或多个源文件组成。2.每个源文件可由一个或多个函数组成。3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。4.源程序中可以有预处理命令(include命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。5.每一个说明,每一个语句都必须以分号结尾。6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

2021-10-13 17:02:45 43

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除