- 博客(24)
- 收藏
- 关注
原创 【C++】智能指针
这是因为我们的ptr先构造,指向了一个int的动态内存空间,然后ptr1拷贝构造出了ptr2,此时ptr1和ptr2都指向这个int的动态内存空间。当shared_ptr对象的生命周期结束时就会调用传入的删除器完成资源的释放,调用该删除器时会将shared_ptr管理的资源作为参数进行传入。当指向的动态内存是一次性开辟的数组的形式,模板参数要写为type[]的形式,来告诉unique_ptr该指针维护的动态内存,是以数组的形式开辟的。如果我们每次申请资源后都自己释放当然是可以的,但是这样也太麻烦了吧。
2025-03-07 13:22:18
745
原创 计算机网络概述
计算机网络的精确定义并未统一,换句话说,全世界没有一个对计算机网络的公认的唯一定义。这里我们给一个最简单的定义:计算机网络(简称网络):由若干结点(node)和连接这些结点的链路(link)组成。结点可以是计算机、集线器、交换机、路由器等。链路可以是有线链路、无线链路。应用层:包含大量应用普遍需要的协议,支持网络应用。运输层: 主机到主机数据传输,负责从应用层接收消息,并传输应用层的message,到达目的后将消息上交应用。为终端设备之间的每个通信定义了数据分段、传输和重组服务。TCP, UDP。
2025-03-01 22:25:21
1517
1
原创 【C++】map与set的使用
set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。
2025-02-25 06:57:08
914
原创 【C++】 stack和queue以及模拟实现
3.1 priority_queue的介绍优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2025-02-24 18:07:26
763
1
原创 【模拟】高精度加减乘除
当数据特别大的时候,比如10的1000次方,这个时候我们的各种数据类型都存不下,我们应该怎么办呢?接下来我们就解决这个问题。【解法】
2025-02-24 14:17:50
181
原创 【C++】继承与多态
定义格式下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。继承关系和访问限定符继承基类成员访问方式的变化类成员/继承方式public继承protected继承private继承基类的public成员派生类的public成员派生类的protected 成员派生类的private 成员基类的protected 成员派生类的protected 成员派生类的protected 成员派生类的private 成员基类的private成员在派生类中不可见。
2024-12-09 11:48:32
880
1
原创 【C++】 list接口以及模拟实现
C++中的list是一个双向链表容器。它允许在任意位置进行快速插入和删除操作,并且能够在常量时间内访问任意元素,并且该容器可以前后双向迭代。1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
2024-11-28 09:26:52
1057
原创 【Linux】进程
举个例子:你的程序中有一个scanf函数,该程序会从运行队列中移除,将自己的状态改为堵塞,链接到键盘的等待队列中,如果等待成功,就会再将自己从等待队列中移除,链接到运行队列中,将自己的状态改为运行。当一个进程需要运行,就把它链接到CPU的等待队列中,当一个进程需要网络请求,就把它链接到网卡的等待队列中。进程退出后,其代码和数据会被立即释放,但是这个进程的PCB会被保留,因为我们可能需要这个进程的状态信息,此时这个状态就是僵尸状态(Z状态)。为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。
2024-11-25 14:47:37
845
1
原创 【C++】 vector接口以及模拟实现
1.vector是表示可变大小数组的序列容器。它是标准模板库(STL)中的容器之一。2. vector可以采用下标对元素进行访问,它的大小是可以动态改变的,而且它的大小会被自动处理。3. vector内部使用动态数组,当前容量不足时会自动生成更大的数组,并将全部元素移到这个数组。4. 与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末 尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。
2024-11-25 08:45:49
1061
1
原创 数据结构——图
生活中人与人的关系是很复杂的,比如我的一个朋友们,他们可能也相互认识。在这种情况下,一对一、一对多的结构难以完整的描述出来这种人际关系。所以就有了接下来的主题——图。
2024-11-21 21:08:02
1298
原创 排序【数据结构】【算法】
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
2024-11-18 23:02:42
1274
2
原创 数据结构——栈、队列
1.栈的定义 栈(Stack)是只允许在一端进行插入或删除操作的线性表。 栈顶(Top)。允许插入和删除的一端。入数据,出数据都在栈顶。 栈底(Bottom)。固定的,不允许插入和删除的一端。 空栈。不含任何元素的空表。 栈的操作特性可以明显概括为后进先出。 栈的插入操作,叫做进栈,也叫压栈,入栈。栈的删除操作,叫做出栈,有点叫做弹栈。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数
2024-11-18 16:48:39
842
原创 C++ 模板初阶
函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参的类型产生函数的特定类型模板。切记:不能使用struct代替class)。类模板实例化与函数模板实例化不同,,对于字符类型也是如此。,对于模板函数的使用,
2024-09-03 18:00:52
380
原创 数据结构——线性表
线性表的顺序储存又称顺序表概念:用一组地址连续的存储单元依次存储线性表中的数据元素的线性表。特点:表中的元素逻辑顺序和物理顺序相同。1. 静态顺序表:使用定长数组存储元素。//定长数组//有效数据个数}SeqList2. 动态顺序表:使用动态开辟的数组存储。//指向开辟空间的数组int size;//有效数据的个数//容量空间的大小}SL;线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。链表的节点处理存储元素自身的信息外,还需要存放一个后继的指针。
2024-08-31 20:17:42
3750
4
原创 C++【初始化列表】【explicit】【匿名对象】【Static成员】【友元】【内部类】详解
(且该类没有默认构造函数时)classApublicAinta_aa{}privateint_a;classBpublicBintaintref_aaa_refref_n10{}privateA _aa;//没有默认构造函数//必须定义时初始化int_ref;//引用constint_n;// const3.初始化列表是每个成员定义的地方。不管你写不写,每个成员都要走初始化列表。
2024-05-16 22:24:18
1176
3
原创 C++类的6个默认成员函数
如果一个类中什么都没有,我们称为空类。那么空类中真的什么都没有吗?其实并不是。任何类什么都不写的情况下,编译器会默认生成六个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数。构造函数不会开空间创建对象,而是初始化对象。* 函数名与类名相同。* 无返回值。* 对象实例化时编译器自动调用对应的构造函数,对象的整个生命周期只出现一次。* 可以重载。* 如果没有显式定义,编译器会自动生成一个无参的默认构造函数。* 如果此函数被private修饰,那么无法从外部直接定义这个类。默认构造函数:不需要
2024-05-13 21:35:50
1791
2
原创 C++的类的基本介绍
/类体:由成员函数和成员变量组成class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的定义有两种方式:1.声明和定义都放在类体中。如果成员函数在类中定义,编译器可能当作内联函数处理。class A//类里面短小的函数,适合做内联的函数,一般在类里面定义2.声明放在.h文件里,定义放在.cpp文件里。声明放在类的头文件中。
2024-05-09 20:33:18
338
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人