自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 简单了解一下智能指针(C++)

摘要:智能指针是C++中基于RAII思想的资源管理工具,通过对象生命周期自动释放资源。标准库提供了多种智能指针:auto_ptr(已废弃)采用所有权转移;unique_ptr禁止拷贝只支持移动;shared_ptr通过引用计数支持拷贝;weak_ptr解决shared_ptr循环引用问题。其中shared_ptr和unique_ptr默认使用delete析构,针对数组需使用特化版本。weak_ptr不增加引用计数,提供expired()、use_count()和lock()等方法安全访问资源。这些智能指针共

2025-12-07 19:18:40 855

原创 简单了解 软硬连接

摘要:本文介绍了Linux系统中的硬连接和软连接机制。硬连接通过ln命令创建,多个文件名共享相同inode,删除文件时仅减少连接数。目录默认包含.和..两个硬连接,连接数可反映子目录数量。软连接使用ln -s创建,是包含目标路径的独立文件,类似快捷方式,若目标删除会导致连接失效。系统禁止用户创建目录硬连接以防止路径循环,而.和..由系统特殊处理。两种连接方式各具特点,硬连接适合文件备份,软连接则更灵活但依赖目标存在。

2025-12-02 15:23:17 220

原创 简单了解C++11的新特性

本篇将会讲一下有关于 列表初始化、右值引用和移动语义、引用折叠、可变参数模板、包装器以。

2025-12-01 14:28:51 817

原创 了解继承和多态(C++)

本文探讨了C++中的继承与多态机制。继承包括三种方式和访问限定符,派生类可以复用基类成员并扩展新功能。多态分为编译时(函数重载)和运行时(虚函数)两种形式,虚函数通过虚表实现动态绑定。文章详述了继承规则、成员隐藏、构造析构顺序,以及纯虚函数和抽象类的概念,阐释了C++实现代码复用和运行时多态的核心机制。重点分析了虚函数重写、协变返回类型和虚表工作原理,为理解面向对象编程提供了系统性的技术解析。

2025-11-16 19:45:56 598

原创 进程程序替换函数(Linux)

path:路径加文件名(要执行的程序在哪里)arg :代表你要执行的命令(命令行参数)三个点 代表可变参数execl 的参数填写 类似于命令行输入,在写完path后,可以直接按照命令行输入的形式填进去注意,最后一个参数必须是NULLNULL代表着命令行参数列表的结束exec:execute 可执行execl的 l:list 列表。

2025-11-13 18:17:07 725

原创 简单了解一下哈希表(C++)

摘要:哈希表是一种通过哈希函数将键映射到存储位置的高效数据结构。主要介绍了两种哈希函数:直接定址法适用于范围集中的整型,除法散列法则更通用但需避免使用2或10的幂作为表大小。哈希冲突不可避免,处理方式主要有开放地址法(包括线性探测)和链地址法,后者通过链表连接冲突数据。负载因子影响冲突概率,开放地址法需控制在1以下,而链地址法无此限制。哈希表底层使用数组,实现时需提供特定仿函数处理不同数据类型。链地址法从根本上解决了冲突问题,适合大规模数据存储。

2025-10-31 18:58:50 541

原创 简单了解一下环境变量(Linux)

文章摘要:Linux系统中,环境变量PATH决定了系统查找可执行程序的路径顺序。用户可以通过"echo $PATH"查看当前路径配置,使用"PATH=$PATH:新路径"临时添加路径(重启后失效)。环境变量具有全局性,可通过env命令查看所有变量。进程通过main函数的env参数或getenv()获取环境变量,这些变量由父进程(如bash)传递。bash的环境变量来自系统配置文件,终端重启时重新加载。

2025-10-24 18:45:03 835

原创 红黑树规则(C++)

红黑树是一种自平衡二叉搜索树,通过颜色规则(根黑叶黑、红不连续、黑高相同)确保最长路径不超过最短路径的2倍,使树高维持在O(logN),从而保证搜索、插入、删除等操作的时间复杂度均为O(logn)。

2025-09-08 10:20:50 126

原创 简单了解一下AVL树

AVL树是一种自平衡二叉查找树,通过平衡因子(右子树高度-左子树高度差值)确保任意节点左右子树高度差不超过1。当插入或删除节点破坏平衡时,AVL树通过四种旋转操作(左/右单旋、左右/右左双旋)恢复平衡。由于严格控制树高在O(logn)级别,其查找、插入、删除操作的时间复杂度均为O(logn)。平衡因子更新规则:新增左子树节点时父节点平衡因子减1,新增右子树时加1,若平衡因子变为0则停止向上更新。旋转操作的选择取决于不平衡节点的位置和子树的生长方向。

2025-09-08 10:07:30 392

原创 编辑器vim(Linux)

Linux下开发工具是独立的写代码——编辑器 vim编译代码——gcc/g++调试——gdb、cgdb构建工具——makefile、make、cmakevim只用来写代码注意:直接用vim打开一个不存在的文件并保存退出,就会自动生成该文件命令模式(Normal Mode)插入模式(Insert Mode)底行模式(Command-line Mode)可视模式(Visual Mode)替换模式(Replace Mode)选择模式(Select Mode)等等。

2025-09-03 16:44:06 431

原创 简单了解二叉搜索树(C++)

摘要:二叉搜索树是一种有序二叉树,具有节点值比较性质(左子树值小于节点,右子树值大于节点)和子树递归性质。它支持高效查找、插入和删除操作(平均O(logn)),但可能退化为O(n)。特点包括中序遍历有序性、查找时通过大小比较决定路径。删除操作需区分三种情况:叶子节点直接删除;单子节点由子节点替代;双子节点需与左子树最大或右子树最小节点交换后删除。注意键值不可修改,插入时通过比较确定位置。

2025-08-14 20:24:44 277

原创 关于继承的一些知识(C++)

摘要: C++继承机制通过基类与派生类实现代码复用,基类封装公共属性和方法,派生类继承并扩展差异化功能。继承方式(public/protected/private)与访问限定符组合影响成员可见性,派生类默认隐藏基类同名成员,需通过作用域运算符访问。基类构造函数需显式调用以确保初始化顺序,派生类对象可隐式转换为基类引用(public继承)。模板类的继承需实例化基类模板参数,派生类可为模板或非模板类。继承体系通过切割赋值和成员隐藏机制实现多态性管理。(149字)

2025-08-01 21:01:59 939

原创 Linux权限的概念

本文介绍了Linux系统中的权限管理机制。核心内容包括:1)权限由用户、文件属性和角色三要素构成,分为读(r)、写(w)、执行(x)三种基本权限;2)权限针对三类角色:文件所有者(u)、所属组(g)和其他用户(o);3)通过chmod命令修改权限,支持符号表示法(u/g/o/a +/- r/w/x)和八进制表示法(4/2/1组合);4)使用chown/chgrp修改文件所有者和所属组,但需要root权限;5)root用户不受普通权限限制。系统通过严格的权限验证机制确保资源访问安全,权限判断基于用户与文件的角

2025-07-25 18:11:20 630

原创 stack和queue的特性(C++)

C++中的容器适配器是一种特殊数据结构,通过封装现有容器提供特定接口。STL包含stack和queue两种适配器,它们基于底层容器(默认deque)实现,不支持迭代器遍历。stack遵循后进先出原则,提供push/pop/top等操作;queue遵循先进先出原则,提供push/pop/front/back等操作。两者都支持empty/size/swap等基础操作,可根据需要指定vector或list作为底层容器。这种设计模式通过限制功能实现特定数据存取逻辑,简化了特定场景下的编程实现。

2025-07-13 16:19:09 426

原创 list的一些特性(C++)

C++ STL 库中的std::list是一个带头双向循环链表,使用之前需要包 <list.h>头文件,它和vector的使用高度类似。

2025-07-07 17:22:11 642

原创 简单了解string类的特性及使用(C++)

摘要:C++中的std::string是std::basic_string<char>的特化类型,本质上是一个管理字符数组的顺序表。它不属于STL但具有容器特性,支持多种构造方式(默认构造、拷贝构造、子字符串构造等)和赋值操作。字符串遍历可通过下标访问或迭代器实现,迭代器采用嵌套类设计。插入操作包括在指定位置插入字符串或字符,其中字符插入分为指定个数和迭代器形式。string类广泛用于处理UTF-8编码文本,使用前需包含<string>头文件。

2025-06-02 17:49:47 1109

原创 简单了解一下模板(C++)

摘要:C++模板是实现泛型编程的关键工具,通过函数模板和类模板减少代码冗余。函数模板允许编写类型无关的函数,编译器根据实参类型自动实例化;类模板必须显式实例化,成员函数定义需在类外重新声明模板参数。模板提供类型安全、编译期多态和代码复用,优于宏定义。当普通函数与模板重载时,优先调用普通函数,强制使用模板需显式指定类型。模板通过编译器自动生成代码实现半自动化编程,提升开发效率。(149字)

2025-05-24 23:07:33 965

原创 初始化列表与类型转换(C++)

在C++中,初始化列表和构造函数体内赋值是两种为类的成员变量赋初值的方式。初始化列表在对象创建时直接初始化成员变量,效率较高,特别是在处理const成员、引用成员或没有默认构造函数的类类型成员时更为必要。它按照成员变量在类中声明的顺序进行初始化。而构造函数体内赋值则先默认初始化成员变量,再通过赋值语句进行修改,适用于非const和非引用成员。初始化列表的语法以冒号开头,成员变量后跟括号内的初始值或表达式。C++11还支持在声明时给成员变量赋缺省值。此外,C++允许内置类型隐式转换为类类型,但可以通过在构造函

2025-05-14 13:04:23 554

原创 拷贝构造和运算符重载(C++)

拷贝构造函数的第一个参数必须是本类类型的引用(通常为。

2025-05-12 20:26:10 1143

原创 构造函数和析构函数(C++)

使用class或者struct等关键字自己定义的类型构造函数在大多数场景都需要进行显式定义。

2025-05-04 11:53:12 555

原创 inline内联函数,nullptr(C++)

普通函数可以进行声明和定义分离是因为,它们有call指令,可以到别的文件寻找定义,而内联函数是直接替换的,其在预处理阶段就已经执行完毕,不会进行链接也就是到别的文件寻找定义。

2025-04-29 18:24:32 372

原创 (C++中的 )引用

这个拷贝的值往往都存在一个临时对象中,其在内存中需要开辟空间,而且具有常性,就跟被const修饰了一样,这个拷贝的返回值不能被修改。语法概念上,引用是取别名不开空间,引用的sizeof 是跟着引用的变量类型的,int就是4,char就是1。但如果是传引用返回,如下图,返回的是别名,返回的不是拷贝的临时变量(没有产生临时对象),而是a它本身。不能全部用引用做返回值,比如自定义函数内的局部变量,下图中,返回后ret已经不在了,上图中,用引用做形参,x和y分别是a和b的别名,x,y就是a,b。

2025-04-24 12:57:32 380

原创 C++里的 命名空间域,缺省参数,以及函数重载

例如全局变量,局部变量,它们一个在全局域,一个在局部域,当它们函数名相同时,

2025-04-23 21:10:19 755

原创 插入排序和选择排序(C语言)

假设end指向已排序数列最后一个数据,end+1就是待排序的第一个数据,将end+1指向的数据与end指向的数据进行比较,小的放在前面,循环比较到 end+1 指向的数据 要大于 end 指向的数据,或者一直比较到已排序数列的第一个数据。例如有一个数组,由 5 4 7 6 8 3 组成,此时可以将数组的第一个数字也就是 5 看成是第一张拿到的牌(此时5就是已排序的数列),接下来的 4 看成是第二张拿到的牌,将它与 5 (第一张牌)进行比较,可得 4 比较小,

2025-04-20 17:17:28 943

原创 了解一下二叉树

二叉树与线性表不同,它是树形结构,其在逻辑上并不是呈线性即顺序的关系,而是一种具有层次的关系,这也是为什么叫它为“树”,因为它很像一颗倒挂的只会有两条分叉枝干的树(下图由网页中搜索得来)二叉树有一个特殊的结点,称为根节点,根节点没有前驱结点,只有后继结点什么是前驱结点,后继结点?首先了解一下什么是树形结构。

2025-04-08 17:30:57 909

原创 了解栈和队列

这里的链表指的是单链表,因为双链表的结点有3个成员,比单链表需要的空间会大很多。如果增加一个ptail指针一直指向队尾,入队的时间复杂度就可以变成O(1)栈的结构跟顺序表很相似,只是其有效数据个数变成了记录栈顶的位置。其中,进行数据的插入和删除操作的一端是栈顶,另外一端就是栈底。栈可以用数组或者链表作为底层结构,时间复杂度都是O(1)所以栈的底层结构一般使用数组,因为空间消耗相对较少。只能在固定的一端进行插入和删除,特点是先进后出。由此得知,栈的物理结构也是线性的。链表:入队O(N) 出队O(1)

2025-04-01 19:48:53 220

原创 顺序表(数据结构)

顺序表是线性表的一种,所以讲顺序表之前要先讲一下线性表。

2025-03-21 13:16:42 377

原创 编译和链接(C语言)

运行环境和编译环境共同构成了软件开发和运行的全流程,但它们关注的重点不同。运行环境关注的是程序运行时的支持和资源管理,而编译环境则关注源代码到可执行代码的转换过程。

2025-03-19 12:44:28 345

原创 文件和文件操作

因为程序的数据是存储在电脑的内存中的,如果内存回收,数据就会发生丢失,再次打开程序时就会找不到上次程序的数据,所以需要对数据进行持久化的保存,使用文件就可以达到这个目的。

2025-03-15 20:53:48 689

原创 结构体的类型声明与内存对齐

声明结构体类型后,可以使用该类型来定义变量。先声明类型,再定义变量在声明类型的同时定义变量// 成员列表。

2025-03-05 21:53:57 589

原创 整数和浮点数在内存中的存储

整数的二进制表示方法有三种,即原码反码和补码有符号的整数,三种表示方法均有符号位和数值位两部分为什么要存二进制的补码呢1、可以将符号位与数值位统一处理2、将加法和减法也统一处理整数在内存中都是以补码的形式进行存储正整数的原码反码补码一致负数的补码需要进行下图操作。

2025-02-28 22:50:17 174

原创 指针的含义

地址的值直接指向存在电脑存储器中另一个地方的值,意思是通过它能找到以它为地址的内存单元,每个内存单元都有对应的编号,这个编号就是地址,地址就能找到内存单元,也形象的称之为指针。当前不知道p应该初始化为什么地址的时候,直接初始化为NULL(它是包含在stdio.h的头文件下的,把0强制转换成void类型的指针)arr[2]可以写成 *(arr+2),*(arr+2)也可以是 *(2+arr),写成2[arr]int** ppa=&pa;野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)

2025-02-23 22:36:40 317

原创 C语言 分支和循环语句介绍

1、顺序结构2、选择结构分支语句:if 、switch3、循环结构循环语句:while、for、do while、go to语句C语言中由一个分号;隔开的就是一条语句。

2024-12-04 23:26:33 438 1

空空如也

空空如也

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

TA关注的人

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