自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(142)
  • 资源 (1)
  • 收藏
  • 关注

原创 无锁编程——从CPU缓存一致性讲到内存模型(1)

1.什么是有锁编程,什么是无锁编程?在编程中,特别是在并发编程的上下文中,“无锁”和“有锁”是描述线程同步和资源访问控制的两种不同策略。有锁编程是指使用锁(例如互斥锁、信号量等)来控制对共享资源的访问。在有锁策略中,线程必须在执行关键部分的代码前获得锁,以确保同一时间只有一个线程可以访问和修改共享资源。当线程完成对共享资源的操作后,它释放锁,使得其他线程可以接着访问资源。特点包括:线程安全:通过锁可以防止多个线程同时访问共享资源,避免竞争条件。

2024-07-01 22:33:05 836 1

原创 C++20实践入门之类模板学习笔记

2.通过下标运算符的重载函数学习到代码的复用,在非const 版本函数中复用了const版本 下标运算符的重载;饰词如果是const 则调动const 版下标运算符,也就是const 对象会调动这个版本的重载。1.通过下标运算符的重载函数学习到代码中的异常安全性和防止异常安全性的行为:复制后交换技术。5.理解了auto 型别推导 :和模板型别推导类似:其实就是auto 对应的是T。4. 拷贝构造还可以写成这种形式:调动了构造函数。

2024-04-21 20:56:58 305

原创 explicit显示类型转换

在C++中,有个非常好也非常坏的特性,就是隐式类型转换。隐式类型转化的“自动性”可以让程序员免于层层构造类型。但也是由于它的自动性,会在一些程序员意想不到的地方出现严重的但不易被发现的错误。在构造函数前加上explicit关键字,禁止编译器自动对类型进行转换。意味着只有在显示调用构造函数和显示类型转换的时候,构造函数才会被调用。

2024-03-30 21:50:05 197

原创 取位运算简单实现

简单实现了一个根据从4字节中随机取某几个字节拼成某个数据的功能,如两个字节为一个数据,等等。

2024-01-15 00:16:27 466

原创 C++代码建立mqtt客户端发送数据和接受mqtt消息

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。

2023-12-24 20:35:52 4391 1

原创 c11 override声明,函数饰词的用法

将会将右值对象再进行拷贝一个左值对象返回。其实这个拷贝是多余的,我们完全可以用创建wigit实例函数返回的右值,调动右值饰词,移动构造地来返回资源,(右值饰词返回的右值被用来做base移动构造函数的形参,优先调动移动构造从而不需要额外的拷贝)如果使用auto res = wigit::create().returnvec();则左值对左值,将函数返回的左值赋值给res.无论何时,只要你在派生类中声明了一个函数,而且该函数意在改写基类中的一个虚函数时,请确保你给该函数加上此关键字。时的语法错误会报错提示。

2023-12-14 22:38:20 418

原创 <<C++primer>>函数模板与类模板相关知识点整理

注意:auto res1 = fun(vec);在某些时候我们不想使用指定模板实参作为函数的返回值,而使用此关键字告诉编译器,返回类型和decltype括号中的类型相同。使用类的类型成员:为了知道模板函数中名字是否可以表示一个类型,用typename通知这是表示一个类型。注意,此函数调用时的返回类型要求是非引用类型,所以在函数中做了移除引用型别的处理。使用示例2:rm的类型是int 而非int&使用示例1:acs作为了a的引用。一个是显示指定参数类型,5.模板参数与作用域。

2023-11-13 22:12:38 348

原创 加载动态库的几种方式

dll的加载发生在程序main函数启动前。,使用LoadLibrary或者LoadLibraryEx来加载一个dll。当dll加载成功时,你会得到一个非空的HMODULE。接下来,你可以使用GetProcAddress来获取这个HMODULE中的导出接口了。你可以理解成,静态链接的lib其实是帮我们在很早的时候就完成了这些事情。使用LoadLibrary有一些细节需要注意。首先是路径,它会在一些特定的路径寻找dll,如果没有找到则会报错。

2023-11-03 20:49:48 1395

原创 WIN32API之PIPE管道

在此处使用,术语管道服务器是指创建命名管道的进程,术语管道客户端是指连接到命名管道实例的进程。用于实例化命名管道的服务器端函数是。命名管道的所有实例共享相同的管道名称,但每个实例都有自己的缓冲区和句柄,并为客户端/服务器通信提供单独的管道。通过使用实例,多个管道客户端可以同时使用同一个命名管道。一个进程将信息写入管道,另一个进程从管道读取信息。任何进程都可以访问命名管道,受到安全检查,使命名管道成为相关或不相关进程之间通信的简单形式。是进程用于通信的共享内存的一部分。函数连接到命名管道。

2023-10-11 22:24:52 370

原创 C++智能指针使用陷阱、shared_ptr实现

智能指针的使用陷阱

2023-07-02 22:00:11 396

原创 games101作业1

第一行的值代表X轴,也是g*t 求得,第二行代表up direction,也就是Y轴,xyz坐标系下的UP direction 方向应该是(0,0,1),第三行代表-Z轴,由-g坐标求得。为了方便之后投影变换,我们需要将此gte左边转换为空间直角坐标,将position移动到坐标系的源点(origin),那么g需要旋转到-z轴,t旋转到Y轴,剩下的g x t旋转到X轴。可以测试矩阵的正确性,如带入1,0,0,0,乘以Rview-1 是可以得到X轴的坐标值 g*t的。那么用数学公式如何转换?

2023-04-10 23:06:36 507 1

原创 智能指针之unique_ptr简单实现

这里我们用到的方法是:先在类中构建一个删除器对象,在智能指针类析构函数中利用仿函数和模板类和模板类的部分特化实现分别可以删除一个对象和一组对象。注意:类模板函数模板的特化版本需要普通模板类或函数模板在其前面已经实现才可以。2 .由于独占对象的拥有权,所以不提供拷贝构造函数和左值赋值函数重载。2.为了满足智能指针的唯一性,不允许拷贝构造和赋值运算符的重载。unique_ptr 智能指针对象,可以独占的管理其所有权。4 .为了实现单个对象和一组对象的管理,添加了删除器类型。3 .提供移动构造和移动赋值函数。

2023-03-26 19:44:41 1050

原创 智能指针之My_auto_ptr

我们在使用裸指针时会存在以下几种问题:1.难以区分指针指向的是。(比如传参时)。⒉.使用完指针之后无法判断是否应该销毁指针,因为无法判断指针是否“拥有"指向的对象;3.在已经确定需要销毁指针的情况下,也无法确定是用delete关键字删除,还是有其他特殊的销毁机制,例如通过将指针传入某个特定的销毁函数来销毁指针所指资源;4.即便已经确定了销毁指针的方法,由于1的原因,仍然无法确定到底是用delete(销毁单个对象)还是delete[]销毁一组对象;

2023-03-12 23:08:14 166

原创 C++vector 简单实现

vector是我们经常用的一个容器,其本质是一个线性数组。通过对动态内存的管理,增删改查数据,达到方便使用的目的。作为一个线性表,控制元素个数,容量,开始位置的指针分别是start /*是数组的首地址*/ finish /*是数组元素的终止位置,看下图*/ end_of_storage /*是数组元素的总容量,看下图*/大概的样子:我们通过操作此三个指针和内存的增加减少或者复制转移的方式完成vector的成员方法。

2023-03-07 22:55:14 984

原创 Git (2) :Git练习--分支的新建与合并

但是,在你这么做之前,要留意你的工作目录和暂存区里那些还没有被提交的修改, 它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。最好的方法是,在你切换分支之前,保持好一个干净的状态。有了 Git 的帮助,你不必把这个紧急问题和 iss53 的修改混在一起, 你也不需要花大力气来还原关于 53# 问题的修改,然后再添加关于这个紧急问题的修改,最后将这个修改提交到线上分支。你可以运行你的测试,确保你的修改是正确的,然后将 hotfix 分支合并回你的 master 分支来部署到线上。

2023-01-31 22:22:56 510

原创 【最后一个单词的长度】

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5解释:最后一个单词是“World”,长度为5。示例 2:输入:s = " fly me to the moon "输出:4解释:最后一个单词是“moon”,长度为4。示例 3:输入:s = “luffy is still joyboy”

2023-01-21 14:44:12 1438

原创 【mutex、unique_lock、lock、try_lock使用】

锁定给定的可锁定 (Lockable) 对象 lock1 、 lock2 、 …、 lockn ,用免死锁算法避免死锁。下列示例用 std::try_lock 周期地记录并重置运行于分离线程的计数器。mutex 类是能用于保护共享数据免受从多个线程同时访问的同步原语。线程1要同时获得1号锁和2号锁的所有权。线程2要同时获得1号锁和2号锁的所有权。线程1不获得互斥的1号锁的所有权。线程1不获得互斥的2号锁的所有权。线程2不获得互斥的1号锁的所有权。线程2不获得互斥的2号锁的所有权。

2023-01-14 16:11:29 994

原创 windows系统.bat脚本文件,linux shell 之--bash的应用

这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。它接收用户输入的命令并把它送入内核去执行。

2023-01-08 21:23:56 1384

原创 函数模板,模板形参的推演

(1)如果使用普通重载函数,那么不管是否发生实际的函数调用,都会在目标文件中生成该函数的二进制代码。而如果使用模板的特化版本,除非发生函数调用,否则不会在目标文件中包含特化模板函数的二进制代码。(2)如果使用普通重载函数,那么在分离编译模式下,需要在各个源文件中包含重载函数的申明,否则在某些源文件中就会使用模板函数,而不是重载函数。例子2:以上看似没什么问题,但是要让字符串比较,就会出现问题,之前比较函数比较的是地址的大小。需要注意的是:他看起来是函数的重载,有什么区别?部分特化:编译时确定数组的个数。

2022-12-29 21:12:23 233

原创 【几种可调动对象,Function和bind;线程的调动方式举例】

注意:尖括号中传入的是类型!方法3、function。

2022-12-24 23:10:31 370

原创 VSCODE linux 解决头文件未找到问题、g++的常用编译参数

一、linux 版本解决头文件未找到问题将此路径添加到"includePath": 下。然后就可以正常搜索到.h文件了二、g++常用编译参数3.优化源代码 (一般用-o2)4.指定库文件5.指定搜索目录案例:下面的.h文件不在当前目录中, 编译器提示找不到用 -I 命令试一试:结果正常输出(但是,用vscode 运行,也 则找不到.h文件)6.7.例子:8.

2022-12-05 22:05:29 3879

原创 二叉树的两种建立方式的实现

一、普通法二、已知前中序遍历构造二叉树

2022-12-04 13:38:51 141

原创 TCP/UDP流式通信c++实现

【代码】TCP流式通信c++实现。

2022-11-27 12:11:23 808

原创 XML的创建和读取

注意此时的xml文件是否在工作目录下,通过右键项目->属性->调试,查看工作路径是否存在xml文件,路径对修改。例如:projectDir 改为OutDir 查看路径是否正确。2.打印DOM的一个节点到buff失败。1.打印DOM的一个节点到缓冲区失败。

2022-11-25 22:36:28 556

原创 二叉树的中序遍历递归写法

给定一个二叉树的根节点 root ,返回 它的 中序 遍历。通过次数1,006,181提交次数1,322,156。进阶: 递归算法很简单,你可以通过迭代算法完成吗?输入:root = [1,null,2,3]树中节点数目在范围 [0, 100] 内。请问您在哪类招聘中遇到此题?输入:root = [1]输入:root = []输出:[1,3,2]

2022-11-13 21:23:08 232

原创 爬楼梯(动态规划)

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?通过次数992,601提交次数1,839,357。解释:有两种方法可以爬到楼顶。解释:有三种方法可以爬到楼顶。请问您在哪类招聘中遇到此题?

2022-10-29 14:02:02 84

原创 合并一个有序链表

输入:l1 = [1,2,4], l2 = [1,3,4]通过次数1,207,488提交次数1,813,572。输入:l1 = [], l2 = [0]两个链表的节点数目范围是 [0, 50]输入:l1 = [], l2 = []l1 和 l2 均按 非递减顺序 排列。输出:[1,1,2,3,4,4]请问您在哪类招聘中遇到此题?

2022-10-27 21:58:53 92

原创 【git 报错的mark】

下次蹦到这种问题可以按上述步骤解决,如果不行就用一个命令同步二者的版本,用同步版本的命令试一试,不行就把远程仓库上的文件都删除试试吧。然后在本地仓库所在文件夹中push到远程仓库。注意要看分支和远程仓库的分支比对,如果远程仓库没有master·分支就不可以。要注意的是,我在码云上把远程仓库的文件全都删除了,这是上面没有说到的。后面这一句话的情况要注意:此时没有连接上。1.是否是用户名和码云不一致?查看公钥是否添加到远程仓库上。2.是否和远程仓库进行连接?

2022-10-23 22:21:14 244

原创 const与this指针

const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。

2022-09-20 17:10:44 188

原创 【纯虚函数,final/override关键字】

如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类型。这样,既可以保证重写虚函数的正确性,又可以提高代码的可读性。它用于这样的情况:设计一个类型时,会遇到无法定义类型中虚函数的具体实现,其实现依赖于不同的派生类。公有继承的概念看起来很简单,进一步分析,会发现它由两个可分的部分组成:函数接口的继承和函数实现的继承。抽象类是一种特殊的类,它是为抽象的目而建立的,它处于继承层次结构的较上层。抽象类是一种特殊的类,它是为抽象的目而建立的,它处于继承层次结构的较上层。

2022-09-17 22:56:24 637

原创 222. 完全二叉树的节点个数

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例 1:输入:root = [1,2,3,4,5,6]输出:6示例 2:输入:root = []输出:0示例 3:输入:root = [1]输出:1提示:树中节点的数目范围是[0, 5 * 104]题目数据保证输入的树是 完全二叉树。

2022-09-12 11:14:46 61

原创 【 leecode 226. 翻转二叉树】

输入:root = [4,2,7,1,3,6,9]通过次数537,914提交次数677,721。树中节点数目范围在 [0, 100] 内。输出:[4,7,2,9,6,3,1]输入:root = [2,1,3]输入:root = []输出:[2,3,1]

2022-09-12 09:21:06 100

原创 类模板,函数模板

模板是泛型编程的基础,所谓泛型编程就是用独立于任何特定类型的方式编写代码所以简单地说,类是对象的抽象,而模板又是类的抽象,也就用模板能定义出具体类函数模板之引用的剥离:发生在在编译时。以下代码补全:函数模板如何实现的?编译时的动作:通过模板生成代码1.值接收2.引用接收部分特化和完全特化什么是假的特化版本?假的特化版本其实就属于是函数的重载了,不是模板特化模板函数中的型别变化举例完美转发后的结果(第一个和第四个是完美转发)

2022-09-11 21:27:02 139

原创 【题目19:删除字符串中出现次数最少的字符】

用map可以修改键值对对应元素的值,但最后的结果输出可能会出现困难(map按照char字符排序,而不是字符的统计个数),就弄了一个容器内pair来排序好,把第一个元素的second作为tag,输出时碰到tag就continue.最先开始我想的是用容器内pair对来做,考虑到最后每个字符的统计都是分散的,就pass了;然后自然而然想到了用map。

2022-09-09 11:35:53 223

原创 【题目18:喊7(C++)】

但是当将要喊出数字7的倍数或者含有7的话。下一个人喊得数字是上一个人喊得数字+1。喊7 是一个传统的聚会游戏。编号为1的人从1开始喊数。按顺时针从1-7编号。不能喊出 而是要喊过。

2022-09-09 09:15:59 167

原创 【题目17:求第k大子串的长度】

/如果子串中只包含同一字母的子串数小于k。求在包含同一字母的子串中。相同字母只取最长的子串。

2022-09-08 22:08:34 254

原创 【题目14:单词接龙】

可用于接龙的单词,首字母必须要与前一个单词的尾字母相同;当存在多个首字母相同的单词时,取长度最长的单词;并指定其中一个单词为起始单词,进行单词接龙,现给定一组全部由小写字母组成的单词数组,如果长度也相等,则取字典序最小的单词;单词串是单词拼接而成的,中间没有空格。接下来的N行分别表示单词数组中的单词。输出一个字符串表示最终拼接的单词串。已经参与接龙的单词不能重复使用;单词个数 1 < N < 20。单个单词的长度 1 ~ 30。表示起始单词在数组中的索引k。输入的第二行为非负整数N。请输出最长的单词串。

2022-09-08 20:28:37 325 2

原创 【字符串分隔成字符串,int转string】

n sscanf(str, “%d%n”, &dig, &n),%n表示一共转换了多少位的字符。%c 整数转成对应的 ASCII 字元。%f 倍精确度数字转成浮点数。%x 整数转成小写十六进位。%X 整数转成大写十六进位。%% 印出百分比符号,不转换。%d 整数转成十进位。%o 整数转成八进位。%s 整数转成字符串。

2022-09-07 22:50:05 122

原创 【中航机考测试感悟】

第一部分:错题记录1.以下程序运行后,输出的结果是(字符c的地址) main() {}因为d[]数组是指针数组,存放的是指针。如下程序输出结果是() int * * k , * j , i = 100;j = & i;k = & j;A.运行错误(我选的是A)B.100C.I的地址D.j的地址瞎**选,第一眼没看到i前面有内置类型(int),内心想的是它是个右值,而不能引用 了???真的是学杂了,i不是int型?????我是真的菜。

2022-09-07 18:05:56 270

原创 【006身高绝对值排序(C++)】

vector用sort是可以排序 ,但是vector 必须使用cmp函数才能排序!然后就想基于各小朋友和自己的身高差,对他们进行排序,0 < H < 50 为新班级其他小朋友个数。来到新班级后,发现其他小朋友身高参差不齐,和小明身高差绝对值最小的小朋友排在前面。和小明身高差绝对值最大的小朋友排在后面。0 < H < 200 为小明的身高。H1 ~ Hn分别是其他小朋友的身高。输出排序结果,各正整数以空格分割。如果两个小朋友和小明身高差一样。则个子较小的小朋友排在前面。且N个正整数各不相同。

2022-09-06 21:34:33 886

上周作业.cpp

上周作业.cpp

2022-07-01

空空如也

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

TA关注的人

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