自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++11 ---- 线程库

为了实现windows 和 Linux 跨平台创建线程问题,C++11开始,搞了个线程库。把std::thread、std::mutex、std::automic 等组件收进标准库,语法与普通 C++ 代码无异,不再依赖平台 API 或外部库。一份 std::thread 源码在 Windows、Linux、macOS 上都能直接编译运行,标准库负责把细节映射到各平台的底层线程实现。

2025-08-09 20:31:10 1004

原创 C++11 -- 智能指针

【摘要】本文介绍了内存泄漏和C++智能指针技术。内存泄漏指未正确释放已申请的内存空间,智能指针通过RAII机制(资源获取即初始化)自动管理资源释放。文章重点讲解了三种智能指针:unique_ptr(禁止拷贝)、shared_ptr(引用计数管理拷贝)和weak_ptr(解决循环引用问题),并分析了shared_ptr的线程安全问题和循环引用场景。最后介绍了定制删除器的使用,以处理非new分配的资源释放。智能指针能有效防止内存泄漏,不同类型适用于不同场景。

2025-08-02 17:29:31 1000

原创 C++11 -- emplace、包装器

本文介绍了C++11中的可变模板参数与包装器特性。第一部分讲解可变模板参数的基本概念,通过模板参数包Args...实现可变参数传递,并演示了emplace系列接口如何利用可变参数直接构造对象,相比传统push_back方法减少了拷贝开销。第二部分介绍包装器function,它统一了函数指针、仿函数和lambda的可调用接口,便于存储到容器中;同时讲解了bind函数的参数绑定和顺序调整功能,通过placeholders实现参数位置的重排。这些特性为C++提供了更灵活的函数调用和参数处理机制。

2025-07-26 17:16:59 1173

原创 C++11 ---- lambda表达式

本文介绍了C++11中的lambda表达式,主要包含三部分内容:首先解释了lambda的本质是一个匿名函数对象,用于简化代码中的小函数定义;其次详细说明了lambda的语法格式,包括捕捉列表、参数列表、mutable修饰符和返回值类型等组成部分,并通过示例展示了不同捕捉方式的使用;最后揭示了lambda的底层实现原理,指出其本质是编译器生成的匿名仿函数类,与显式定义的仿函数具有相同的调用机制。文章通过对比传统仿函数和lambda表达式的实现方式,突出了lambda在简化代码方面的优势。

2025-07-17 22:27:14 837

原创 C++11 ---- 右值引用和移动语义

C++11是继C++98后的一个比较重要的版本,C++11提供的很多特性,弥补了C++的一些短板,满足现在开发的基本需求,是值得深入学习并掌握的。

2025-07-04 17:57:18 794

原创 【Linux】操作系统入门:冯诺依曼体系结构

你是否好奇,当你在键盘上敲下一行文字发送给好友时,计算机内部发生了什么?为什么鼠标点击后程序就能瞬间响应?这一切的答案,都藏在计算机的“心脏”——中。

2025-05-13 21:41:25 786 1

原创 Linux:权限的理解

为什么我们创建普通文件的默认权限是:664,目录文件的默认权限是:775   ???

2025-05-05 20:55:15 1171

原创 红黑树——如何靠控制色彩实现平衡的?

enum ColorRED,BLACK// 节点的值,存储键值对// 指向父节点// 指向左孩子// 指向右孩子Color _col;

2025-04-25 21:41:02 1357

原创 AVL树--如何守护平衡的?

/该节点父亲//该节点左孩子//该节点右孩子int _bf;//表示该节点的平衡因子,_kv(kv),_bf(0){}父节点指针:在 AVL 树的插入和删除操作中,需要通过父节点来调整树的结构。例如,在旋转操作中,需要知道当前节点的父节点,以便正确地调整父子关系。

2025-04-17 19:04:18 716

原创 二叉搜索树--高效的数据管理

1.1、什么是二叉搜索树?二叉搜索树(BST)是一颗二叉树,是重要的树形结构之一。对任意节点,其左子树的所有节点值均小于该节点值右子树的所有节点值均大于该节点值。左子树和右子树本身也是二叉搜索树。// 指向左节点// 指向右节点K _key;// 存储键值数据{}public:// ...其他操作private://指向二叉搜索树的根节点。

2025-04-17 19:04:06 1193

原创 深入理解C++多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写这里通过基类引用接收不同派生类对象时,虽然从代码表面看是调用父类函数,但实际会根据对象的实际类型动态选择对应的函数实现。在虚函数的后面写上 =0 ,则这个函数为纯虚函数。

2025-04-03 18:53:51 1331

原创 C++:继承+菱形虚拟继承的一箭双雕

谁还不懂继承?快来看看这篇文章!!

2025-04-03 18:53:29 898

原创 string类--C++

目录一、std::string类的基本使用(常用)1.1、初始化与赋值1.2、字符串的拼接1.3、string类对象的访问及遍历操作1.4、长度与容量操作1.5、子字符串与查找1.6、string类非成员函数二、模拟实现string类核心功能2.1、类定义与成员变量2.2、构造与析构函数2.3、深拷贝2.4、扩容机制三、完整代码比如:可以通过多种方式访问和修改字符返回pos位置的字符这里operator[]与at()区别在于at会进行边界检查,如果超过边界,编译器会抛异常。前者不检查边界注意:返回指向字符串

2025-03-19 20:38:11 1283

原创 C/C++ 动态内存管理

跟C语言不同的点在于,C++在new时会调用构造函数,在delete释放空间前会先调用析构函数C++内存申请失败时,会抛异常。

2025-03-18 21:21:05 812

原创 C++初始化列表的三大强制场景:告别低效对象构造

在构造函数体内通过赋值操作设置成员变量的值,本质是。:在对象创建时直接调用成员变量的构造函数,。以一个,接着是一个的数据成员列表,每个""后面跟一个放在括号中的。在类中就是其在初始化列表中的,与其在初始化列表中的先后次序无关_a2在_a1之前声明,所以_a2会比_a1先初始化。

2025-03-14 18:29:29 901

原创 类的6个默认构造成员函数

会去调用他的默认构造。

2025-03-11 12:24:41 995

原创 类和对象 1

类可以看作是结构体的升级版,里面不仅可以有成员变量,也可以有成员函数,并通过访问限定符进行封装和控制。C语言结构体:只能定义成员变量。C++结构体/类:可定义成员变量和成员函数,推荐使用class关键字。// 类体:由成员函数和成员变量组成声明和定义均在类内:成员函数可能被编译器优化为内联函数。声明在头文件(.h),定义在源文件(.cpp):推荐方式,成员函数需加类作用域。使用前缀(如_)区分成员变量与形参。

2025-03-07 18:33:32 1053

原创 初识C++

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

2025-03-06 18:35:24 923

原创 常见的排序算法

时间复杂度:平均情况是 O(nlogn),最好情况也是 O(nlogn),最坏情况是 O(n2)。空间复杂度:递归版本是 O(logn) 到 O(n)(取决于递归深度)稳定性:不稳定。

2025-03-04 18:13:23 869

原创 深入探索二叉树

子树具有与整棵树完全相同的结构特征。

2025-03-02 08:54:53 788

原创 栈和队列

一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。遵循原则栈的插入操作叫做进栈/压栈/入栈,。栈的删除操作叫做出栈。

2025-02-28 15:52:07 370

原创 顺序表和链表

带头双向循环链表(双链表):不仅存着下个结点的地址,还存着上个结点的地址,head存着最后结点的地址,又存着下个结点的地址。逻辑上结点之间双向循环连接。就是n个具有相同特性的数据元素的有限序列。挨着存储的,常见的线性表:顺序表、链表、栈、队列。就是一个结构中除了保存数据,还保存了下个结构的地址,把他们连接起来。无头单向非循环链表(单链表):就除了有自身的数据,还保存了下个结点的地址。的存储单元依次存储数据元素的线性结构,一般情况下用。在数组上完成数据的增删查改。、非顺序的存储结构,数据元素的。

2025-02-27 13:11:51 478

原创 指针大人的世界

这段代码是一次函数声明,声明的函数名叫signal,signal函数的参数有2个,第一个是int类型,第二个是函数指针类型,该函数指针能够指向的那个函数的参数是int,返回类型是void。signal函数的返回类型是一个函数指针,该函数指针能够指向的那个函数的参数是int,返回类型是void。变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。这里pa左边写的是 int* , * 是在说明pa是指针变量,而前面的 int 是在说明pa指向的是整型(int) 类型的对象。

2025-02-26 13:36:55 636

原创 程序环境和预处理--C语言

C语言设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进⾏编译的源⽂件__LINE__ //⽂件当前的⾏号__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义#define reg register //为 register这个关键字,创建⼀个简短的名字;) //⽤更形象的符号来替换⼀种实现case //在写case语句的时候⾃动把 break写上。

2025-02-24 15:17:28 786

原创 数据在内存中的存储

1、将数据的低位存放在内存的高地址中,而数据的高位存放在内存的低地址中。2、将数据的低位存放在内存的低地址中,而数据的高位存放在内存的高地址中。int a=10;//在32位机器上其十六进制为0x0000000a也可通过调试,查看内存窗口看到,以vs2022为例:这里数据的低位存放在内存的低地址处,高位存放在内存的高地址处,就是小端存储(小端字节序存储)

2025-01-27 12:26:05 838

原创 C语言操作符详解

目录一、操作符的分类二、算术操作符: + 、- 、* 、/ 、%1、除法运算符(/)2、取模(余)运算符(%)三、原码、补码、反码四、移位操作符1、左移操作符2、右移操作符五、位操作符1、&按位与(有0出0,全1出1)2、| 按位或(有1出1,全0出0)3、^按位异或(相同为0,相异为1)六、单目操作符1. 逻辑非操作符:!2. 自增操作符:++3. 自减操作符:--4. 取地址操作符:&5. 解引用操作符:*6. 正号操作符:+7. 负号操作符:-8. 按位取反操作符:~9. sizeof操作符10. 类

2025-01-22 10:37:39 984

原创 扫雷游戏——C语言版

• 使⽤实现经典的扫雷游戏• 游戏可以通过实现或者• 扫雷的棋盘是的格⼦•• 可以◦如果位置不是雷,就显⽰周围有⼏个雷;如果位置是雷,就炸死游戏结束;把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束。

2024-12-19 19:41:51 1382

原创 rand()函数用来生成随机数

1、返回类型为2、rand函数返回的数是的,是通过某种算法来生成的随机数,并非真正的随机之间,的值依赖编译器实现,大部分是比如:但此时你再打印几次,你会发现生成的随机数还是和上次一样,并没有实现真正的随机,rand函数是通过算法里的来随机生成的,而默认。而种子的生成是由srand()函数实现的。

2024-12-14 22:20:22 550

原创 关于C语言的分支(选择)和循环结构

什么是分支(选择)和循环结构?C语言作为一种结构化设计语言,由和三种结构组成,这三种结构用来解决生活中的大部分问题,这里讲选择和循环结构。

2024-12-04 22:14:42 971

原创 ##布尔数据类型

c语言原来并没有为布尔值单独设置一个类型,而是使用整数0表示假,非0值表示真。在C99中也引入了布尔类型,是专门表示真假的。为了方便,后用 bool 也可表示 _Bool。布尔类型的使用的包含头文件布尔类型的变量的取值是:ture或false。

2024-11-22 18:28:28 273 1

空空如也

空空如也

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

TA关注的人

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