自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CppYyds的博客

欢迎访问个人小站:https://acking-you.github.io/

  • 博客(410)
  • 收藏
  • 关注

原创 C++工程实践必备技能

是用来生成调试信息的,建议不要再选项里面加,因为CLion会根据cmake配置项里的 Release/Debug 模式来自动加上,所以你不要画蛇添足,这样会出错,加入调试信息可以让最终收集到的信息有具体的源码位置,方便我们查看分析的结果。其实测试覆盖率是几乎所有编译器自带的功能(CLion中暂时不支持msvc,mingw是支持的),但是需要在编译的时候加入对应的参数,但不同的编译器参数很多很繁杂,CLion就为我们提供了便利性,使用CLion你只需要点击两下鼠标就行了。

2023-01-30 21:22:10 2086 1

原创 ejson4cpp——一个使用极致简单且性能可比rapidjson的C++json解析库

ejosn4cpp :意味着这是一个使用上非常 easy,同时性能上也非常 efficiency c++ json解析库。 支持c++11及以上,并且完全的跨平台。

2023-01-18 21:46:57 972

原创 CLion开发环境的完全解析(QT开发?STM32?顺便速通cmake

而CLion对wsl的适配程度和正常的本机开发几乎没有任何区别,我们只需要现在Windows上安装wsl2后,CLion便可以自动识别你本机的wsl环境了,但是你有了wsl,并不意味着你有了对应的编译链,之前说了,编译链是包括四个东西的,你需要一一手动再wsl上先安装好,CLion会自动识别到的,如果识别不到,由于是通过。理解了这三步以及cmake的配置之后,我相信如果突然间CLion不出现执行程序的按钮,或者一个外部的项目我们无法跑起来,那么我们肯定是会有对应的排查思路了。

2023-01-04 21:47:17 3210

原创 chatgpt教我内存对齐,对齐了但没完全对齐?

判断值v是否按x,这其实是很简单的道理,首先这个公式只能运用于2的n次方,其次这是一个很明显的利用位运算的取模操作,只能运用于 2 的 n 次方的原因在于 只有满足这种情况 x-1 后才能是连续完整的二进制填充位(比如 01000 -1 = 00111)。得到值v按x,这里的x同样只能是2的n次方,这也是一个很简单的道理,我举个例子你就懂了。如果要让 123 按照 8 字节边界对齐,我们首先写出 123 对应的二进制1111011,8为1000。

2022-12-19 22:56:37 3206

原创 一次性分清zip、gzip、bzip2、tar命令

我们把这几个命令归类为几种能力,一个是解压缩能力一个是打拆包能力。我这里打包的意思是不使用压缩算法对文件进行压缩,只是简单的把多个文件归档为一个文件。而拆包则是它的逆过程。压缩则是大家熟知的将文件以某种压缩算法对内容进行缩减,解压则是它的逆过程。zip命令用于将文件压缩为 格式的文件,之所以将他定义为可打包拆包是因为他可以支持多文件的压缩,而其他的 和 只能对单文件进行压缩,也就是说如果要压缩多文件,需要先经过打包过程变成单文件再压缩, 格式的文件默认将打包和压缩放在一起了,而 命令也不支持单独的打

2022-12-05 00:45:50 3388 1

原创 别再推荐使用 jsoncpp 了

等STL容器默认的拷贝行为,一个简单粗暴的优化方式就是通过传指针的方式而不是传值的方式,但是这样外界就需要来管理内存了,否则会产生内存泄漏等问题。优化的前提下,某个库如果大量用到 STL 以及元模板编程的时候,STL 会拖后腿,而元模板也没法发挥最大效用。而且差距也没有大佬视频里面那么大,两倍的差距而已,这对于一个浅拷贝和深拷贝的性能差距是很正常的。解析库,性能的对比对象就是这个库,我记得是略有不如。如果有用过 jsoncpp 的,以及其他语言的json库的,我觉得都会认为。则是不拥有所有权的方式优化。

2022-11-27 23:22:57 877

原创 C++编译期反射实践——以AOP实现为例

自古以来,C++就一直缺少一个编程语言的重要特性——反射,但如果熟悉C++元模板编程的同学,就知道以C++的风格,肯定是不会在标准库中添加运行时的反射支持的,从最新的C++版本演进来看,倒是编译期反射可能得到更好的支持。C++11 -> C++14 -> C++17 -> C++20… 不断让元模板编程变得更简单,更规范。本次的编译期反射实践,代码要求的最低C++版本为14,因为用到了 make_shared、decay_t。本次实践的完整代码仓库:MyUtil/tree/master/aop我们如何判断某

2022-11-26 02:32:58 1610 1

原创 Golang Web开发一键生成各层级模板代码

每次写web项目,模板都是统一的,每次都要写大量冗余的代码会很烦,在Java中有很多逆向生成的工具,而Go语言我找了很久,也没有发现这样一个类似的工具,所以自己就开始造这样一个轮子了。现在这个项目已经完成了,分享出来供需要的人使用。

2022-11-19 18:19:25 1158

原创 项目实战——高拓展的实时聊天系统

带你一步步实现一个聊天系统的整体架构,然后一步步讲解对应的代码实现

2022-09-20 19:13:45 719

原创 [Java课设]Swing用分层思想浅写个管理系统课设

Java管理系统课设

2022-06-05 21:31:21 379 1

原创 一文带你进行Go语言工程实践

文章目录并发和Goroutine并发和并行的区别线程与协程的区别Goroutine用法并发的通信Channel并发安全依赖管理GOPATHGOPATH弊端Go VendorGo Vendor弊端Go Module (最终解决方案依赖管理三要素配置文件版本规则杂项中心仓库管理依赖库依赖的分发较为神奇的地方本地工具测试为什么要测试?测试类型单元测试go单测的规则go单测实例单元测试框架衡量单元测试的标准代码覆盖率打桩测试基准测试(Benchmark)具体例子代码分析代码效率分析项目实战需求描述项目分层结构代码实

2022-05-10 00:10:23 692

原创 Go语言上手(一) | 青训营笔记

这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记。文章目录语法速览基础语法第一:类型第二:内置库部分json库的使用时间库的使用字符串和数字互转os相关信息实战项目猜谜游戏(pass,过于简单)在线词典第一步:抓包得得到数据进行分析第二步:利用工具生成代码curl请求直接转为go的请求代码JSON转Golang Struct第三步:更改代码实现功能homeworkSOCKS5代理服务器SOCKS5简单介绍SOCKS5代理原理具体实现v1-简单echo服务器v2-实现SOCKS5的握手阶段v3

2022-05-08 03:18:33 633

原创 【(bug日记)C++实现QQ——UI篇】——实现实时qq好友搜索框

文章目录项目背景实时QQ好友搜索框实现思路具体思路实践实践一:通过保存一份拷贝(扑街bug)实践二:通过前后端分离+智能指针完美解决附录项目背景想要用纯C++实现一个QQ,包括客户端的ui和通信,以及服务端的数据收发通信。客户端:使用C++的Qt框架实现UI(正在进行),使用自己手写的网络框架进行通信(还未开始),以及手写的bencode编码进本地序列化(已经完成)。服务端:使用自己造好的网络框架进行数据的收发和通信(还未开始)。本篇进度:已经实现了登录界面和基本的主界面,本次是想拓展一个实时的搜

2022-04-25 01:12:21 1488

原创 [C++多线程]1.3-多线程控制的另一种姿势-条件变量(condition_variable), 信号量(semaphore)

文章目录条件变量(C++11)为什么要引入条件变量条件变量的用法条件变量引发的虚假唤醒信号量(C++20)std::binary_semaphore使用counting_semaphore使用条件变量(C++11)为什么要引入条件变量我们先来看看一个由互斥量加锁构成的生产者消费者模型://// Created by Alone on 2022-3-27.//#include <iostream>#include <mutex>#include <deque&g

2022-03-27 17:38:49 1335

原创 参考Redis源码实现不带span的简单跳表

文章目录什么是跳表?正式实现跳表的创建Redis实现cpp实现Insert插入元素Redis实现cpp实现Delete删除元素Redis实现cpp实现正式解题什么是跳表?想要弄清这个,可以查看一篇大佬的文章,把跳表分析的非常透彻,并且剖析了Redis源码,我这里只讲解不带span的Redis源码C++复现。(后续会有带span的完美Redis源码C++复刻)大佬的讲解如果想查看Redis源码的各位,可以点进这个链接https://github1s.com/redis/redis/blob/unsta

2022-03-19 18:13:15 1603

原创 leetcode每日一题——进制的转化(顺便总结下位取得后的处理方式)

文章目录题目解析和总结题目题目链接解析和总结这类题型的关键,就在于取位后根据取位的方向来确定可视化的呈现。比如从低到高取位,或者是从高到低取位。此题(数字转字符串):(假设转R进制)%R再/R从低位开始取,比如102%10取得的是2,/=10后得到10,以此类推。我们还需要将位进行正确的排列,由于我们的可视化采取的是十进制,所以应该把每一位对应到10进制的每一位上。故直接 位的数字*该位对应的幂 可以将其放到对应的可视化位置。代码如下:class Solution {public

2022-03-07 20:43:47 616

原创 Exception: No Windows desktop project configured. 或者Can‘t load AOT data的Flutter运行报错处理

文章目录突发奇想想学习学习flutter这个框架Exception: No Windows desktop project configuredCan't load AOT data突发奇想想学习学习flutter这个框架Exception: No Windows desktop project configured需要以下三行命令:(注意,它是调用的git去拉取GitHub仓库的内容,所以需要魔法)flutter channel devflutter upgradeflutter config

2022-03-05 20:58:32 4503

原创 ”更高级的宏“模板到底是怎么实例化的?

文章目录从预编译的角度对比宏定义和模板来测测宏定义宏定义的害处模板是否会进行预处理操作?善用编译期的模板为什么大多数模板库声明和定义都放在一起?声明和定义分开处理的原因为什么模板要把声明和定义写在一起?如何防止模板类的重复定义?一些简单且常用的模板技术template + 函数声明将模板提前实例化一份type_traits(类型萃取技术)type_traits + static_assert()的运用assert和static_assert的对比type_tarits的运用本文默认你已经拥有基本的gcc

2022-03-05 18:17:31 692

原创 【C++多线程】1.2-线程安全的保证——互斥量mutex(锁)和原子变量atomic

文章目录资源竞争引发的线程安全问题如何解决资源竞争问题?法一:加互斥锁mutex(性能较低)法二:转用原子变量(效率更高)三个常用的互斥量装饰器std::lock_guard (C++11)死锁的产生利用std::lock批量上锁防止死锁发生std::unique_lock (C++11)std::scoped_lock(C++17)资源竞争引发的线程安全问题有如下的代码:#include<thread>#include<iostream>int globalVaria

2022-03-02 22:27:25 1908 2

原创 【C++多线程】1.1线程的创建

文章目录创建线程(thread)分析程序报错原因理解线程的创建运行过程解决报错的方式:join()和detach方法一:调用join()方法进行合并方法二:调用detach()方法分离线程联系创建线程(thread)分析程序报错原因头文件:include<thread>理解线程的创建运行过程你可以试着运行下面这段代码,你会发现,他肯定会报错!#include<thread>#include<iostream>void task(){ std

2022-03-02 20:33:53 573

原创 增量元素之间的最大差值——前缀dp

文章目录题目题目解析法一:暴力枚举法二:dp优化法三:进一步优化空间复杂度题目题目链接题目解析法一:暴力枚举此题由于是简单题,所以直接可以暴力枚举。暴力枚举的时候我们也可以考虑优化一下,比如外层枚举 nums[i]nums[i]nums[i] 的时候,内层直接找右边的最大值。代码如下:class Solution {public: int maximumDifference(vector<int>& nums) { int n = nums.si

2022-02-26 15:17:14 463

原创 [C++] 用bitset代替bool数组的性能测试以及bitset的基本使用

文章目录bitset介绍使用¶头文件¶指定大小¶构造函数¶运算符¶成员函数¶应用¶算法样例题bitset与埃氏筛结合埃氏筛速度测试bitset介绍std::bitset 是标准库中的一个存储 0/1 的大小不可变容器。严格来讲,它并不属于 STL。bitset 并不属于 STL,而是一种标准库中的 “Special Container”。事实上,它作为一种容器,也并不满足 STL 容器的要求。说它是适配器,它也并不依赖于其它 STL 容器作为底层实现。——摘自《The C++ Standard L

2022-02-22 16:52:28 2790 2

原创 TCP协议从入门到精通

文章目录TCP协议TCP头部信息TCP头部信息清单16位端口号(port number)32位序号(sequence number)32位确认号(acknowledgement number)4位头部长度(header length)6位标志位16位窗口大小(window size)16位校验和(TCP checksum)16位紧急指针(urgent pointer)TCP头部选项一个真实的抓包验证过程TCP的建立和关闭三次握手和四次挥手三次握手四次挥手半关闭状态超时重连的抓包探索TCP状态转移过程TCP状

2022-02-22 02:23:05 2437

原创 1bit与2bit字符——简单模拟题

文章目录题目题目详解解题代码题目题目链接题目详解读懂题:此题是为了让最后以一个字符解码,也就是 000 ,而含 111 的只能是两个字符进行解码,所以遇到 111 就必须确保后面有 000 或 111 来用于抵消。解题法:法一:正向遍历法直接通过遇到 000 走一步,遇到 111 走两步,再看最后是否能恰好走到最后一个 000 的位置,如果能则 truetruetrue 否则 falsefalsefalse 。法二:反向遍历法由于遇到 000 能直接跳过,而遇到 111 则后面必须含

2022-02-20 12:40:13 198

原创 煎饼排序——选择排序的运用

文章目录题目解题思路解题代码题目题目链接解题思路读懂题目:此题并不是要我们求出类似于示例所给的最优情况的方式得出答案。他只要能够翻转成有序的操作序列即可。故我们可以按照选择排序的思路,利用翻转能够将首尾交换,来进行两次翻转把最大值移动到最后的位置,第一次翻转到首位,第二次翻转到后面的位置即可。具体例子:例如:[3,2,4,1]---->[?,?,?,4]我们可以先找到数字4的位置,将数字4前进行翻转变成[4,2,3,1],接下来我们在整体翻转[1,3,2,4],这样我们把数字4移

2022-02-19 22:55:12 179

原创 leetcode打卡——骑士在棋盘上的概率

文章目录题目题目详解解题代码题目题目链接题目详解一个骑士有 888 种可能的走法,骑士会从中以等概率随机选择一种。部分走法可能会让骑士离开棋盘,另外的走法则会让骑士移动到棋盘的其他位置,并且剩余的移动次数会减少 1。定义 dp[step][i][j]dp[step][i][j]dp[step][i][j] 表示其实从棋盘商店的点 (i,j)(i,j)(i,j) 出发,走了 stepstepstep 步时仍然留在棋盘上的概率。当点 (i,j)(i,j)(i,j) 不在棋盘上的时候,dp[ste

2022-02-18 21:23:39 148

原创 leetcode情人节特辑——寻找单身狗

文章目录题目题目详解解题代码题目题目链接题目详解这题本应是简单题,就是简单的异或规律,但是题目要求使用 O(logn) 时间复杂度, O(1) 空间复杂度,而如果直接异或,只会是 O(n) 的时间复杂度。那么该如何去做呢?这题有二段性,什么叫二段性呢,就是能有一个分界点把特性一分为二。比如此题由于数据是有序的,所以数量为两个的元素会挨在一起,而且在 单身狗 左边连续的元素下标会有以下规律:两个相邻的相同元素中,第一个元素下标会是偶数,第二个是奇数。右边的连续元素下标会有以下规律:两个相邻的相同

2022-02-14 22:23:08 290

原创 并查集/dfs解决——leetcode每日一题——1020飞地的数量

文章目录题目描述题目解析解题代码题目描述题目链接题目解析一、以边界值为对象进行搜索解决一开始很快就想到用比较暴力的直接dfs深搜,然后就超时了。注意此题由于以 1 是否能延申到整个边界以外来判断是否为有效的 1 所以我们需要取巧,应该以所有边界的 1 为对象先把所有能超出的 1 搜出来,然后剩余的 1 就是答案了。二、并查集合并+是否接壤边界属性更新创建一个并查集,用一维数组存下所有二维数组的元素,同时再增加一个一维数组用于判断是否边界接壤,每次 merge 操作的时候判断需要同时执行合并

2022-02-12 20:08:29 474

原创 hugo博客图形化写作工具——Qt实践

文章目录软件使用项目介绍QtRun C++ 源代码软件使用视频教程项目介绍项目所在地温馨提示:如果本地还未搭建 hugo 博客,可以使用我的另一个 hugo 博客自动搭建工具QtRun:介绍:一个用纯 C++ 写的命令行工具。主要作用:根据提供的 hugo 博客本地地址进行命令行式的自动化写作,会把每一篇文章的图片、分类、标题等内容自动化完成。构建方式:确保生成 exe 文件的目录下含有以下文件,且确保编译器支持 C++17。BlogPath.txt #提供本地h

2022-02-12 14:47:50 765 1

原创 [一键]只需30s一键搭建博客——Qt图形化工具

文章目录软件使用项目介绍项目关键源码软件使用使用前请下载好git工具视频教程项目介绍项目所在地温馨提示:本地搭建完网站框架后,每次新建文章的写作体验较差,可以看看我的另一个 hugo 博客自动化写作工具src目录:存放图形化项目的源代码,使用 Qt6 可直接启动 QHugoInit 项目。bin目录:存放项目的可执行二进制文件。exec_code.bat:用于写入代码执行脚本hugo.exe:构建博客的基石QHugoInit.exe:软件启动程序log.txt:整个程序

2022-02-12 14:46:12 801

原创 C++ gui实现学生管理系统

C++实现简单学生管理系统

2022-02-05 13:31:13 1592

原创 C++右值语义的基石——完美转发

文章目录什么是完美转发?如何实现完美转发?任何模板库都离不开完美转发std::forward的实现原理收获什么是完美转发?熟悉现代C++语法的都应该清楚,C++把变量分为左值和右值,为了实现对资源的转移而不是拷贝,右值和对应的移动构造函数应运而生,但我们发现,很多时候我们并不能把左值和右值精确的传递给对应版本的函数进行处理,比如下面一个简单的代码,你会发现即使我们把函数的参数类型设置为右值引用,但当拿它去调用对应的构造函数时,它给出的竟然是拷贝构造!故这个转发还不够完美!#include<ios

2022-02-04 23:02:56 654

原创 字符串类题目——滑动窗口和递归分治以及一些些位运算的结合

文章目录题目一:至少有 K 个重复字符的最长子串题目解析解题代码法一:递归分治法二:枚举类型的滑动窗口题目二:最长的美好子字符串题目解析解题代码方法一:位运算+暴力遍历方法二:递归分治题目一:至少有 K 个重复字符的最长子串395. 至少有 K 个重复字符的最长子串题目解析有两种方法:递归分治解决:该分治法的应用对象:解决那种不会去跨越任何一个段更新答案的题目。比如此题这种关于字符串子串的题。首先在整个字符串大范围内可以确定哪些字符没有达到k次,故只要存在这些字符的子串都被排除在外。具体到递归

2022-02-01 23:41:31 1048

原创 leetcode每日一题——地图中的最高点(路径更新权值问题)

文章目录题目解题思路解题代码题目题目链接解题思路两种解题思路,都是根据题目的意思更新路径信息即可:bfs思路:由于相邻的两个格子必须高度差为1,而水域必须高度为0,所以,直接以水域为bfs源点,进行bfs把整个区域的值给更新就行了。这是bfs思路。dp思路:由于dp都依赖上一次更新的结果,而我们一般就是从左到右的遍历更新,而这题是和四个位置相关,所以,我们分为:从上到下从左到右更新,可以把依赖上和左的答案给更新,从下到上,从右到左更新,可以把依赖下和右的结果给更新完。解题代码BFS代

2022-01-30 01:08:38 164

原创 leetcode每日一题-游戏中弱角色的数量

文章目录题目解题思路解题代码收获题目题目链接解题思路一句话解决:以第一个字段为标准从大到小排序,然后再遍历数组,对比第二字段的最大值即可。关键细节:为了避免第一个字段相同的情况下被更新,所以在排序时采取,攻击力降序防御力升序的方式(关键)来进行。这样就让第一个字段相同时,按照从左到右的遍历顺序是不可能把第一个字段相同的情况拿来更新 cnt 。解题代码注意:golang 的代码中的断言型函数接口有点不一样。。它调用时用的是数组下标的形式来调用。cpp versionclass

2022-01-28 14:34:42 2641

原创 leetcode每日一题-检测正方形

文章目录题目题目解析解题代码总结题目题目链接题目解析注意此题为计算几何类型的题目,我认为这类问题最重要的就是把这个几何图形用好用的方法去表示出来。三个重点:点的表示:我们通过上下两点确定正方形的原则来表示,且点的存储方式一点不能用pair,这样效率及其低下,且难以有一定的自由度取操作 x,y 轴,我们采用哈希表套哈希表的方式取存储!点的记录:通过嵌套哈希表完成点的次数记录,比如:unordered_map<int, unordered_map<int, int&gt

2022-01-28 00:03:36 690

原创 C++到底有多少种魔法来实现println?

文章目录PrintLn函数实现方式一:用初始化列表实现PrintLn() 【C++11】版本一:朴素初始化列表版本版本版本二:加模板参数版本方式二:用可变参模板实现 【C++11/17】C++11版本实现C++17版本实现方式三:可变参模板的fold expression展开 【C++17】简单的利用fold expr实现加上流程控制实现更多fold expr运用...PrintLn函数实现想要实现PrintLn,关键在于支持无限个参数的打印函数,所以我大致总结下C++能够如何去实现它!方式一:用初

2022-01-21 17:32:11 1749 1

原创 石子游戏 IX——一场关于模运算加和规律的博弈

文章目录题目描述题目解析解题代码题目描述题目链接题目解析假设先手者名为 A ,后手者名为 B 。由于只关注是否取完 和 数字和是否 %3==0,我们把这题要取的数字分为三种:%3==0 的数字( 0类型 ):只要不是第一次取数,并不会对整个数字的和模产生任何影响。%3 ==1 的数字( 1类型 ):一旦数字和的模已经是2,则游戏结束,只有数字和的模为1才能继续游戏。%3==2 的数字( 2类型 ):同上个类型,只有数字和的模与当前数字的模相同才能继续游戏。根据以上分

2022-01-20 17:51:43 1972

原创 牛客-食物链——并查集的运用(扩容用下标表示不同类型的集合)

文章目录题目题目详解解题代码题目题目链接题目详解解释三个集合代表:f[x]所处集合一定包含所有与x同类元素f[x+N]所处集合一定包含所有捕食x的元素f[x+2*N]所处集合一定包含所有被x捕食的元素实际上这个方法在之前有碰到过类似的,只不过这次需要每个元素都能表达出它的吃与被吃的对应关系集合,所以需要增加2*N个容量!之前有道集合问题也用的并查集,只需要增两个容量表示两个集合即可,但这次是不一样了。之前那题的题解链接那么我们来看一下哪些情况是同类(1)a吃c,b也吃c,则a

2022-01-19 22:35:45 514

原创 牛客-集合问题——并查集的运用

文章目录题目题目解析解题代码题目题目链接题目解析简述:将下标(用哈希表根据值来维护下标信息)用并查集连成集合,设置两个单独结点a,b来进行额外的维护。一旦无法连入A则把该集合整个根结点设为b,一旦无法连入B则把该集合整个根节点设为a。解题代码#include <bits/stdc++.h>using namespace std;#define MAXN 100010int n, A, B, a, b, maxn = 0, val[MAXN], fa[MAXN];unor

2022-01-18 19:53:37 526

空空如也

空空如也

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

TA关注的人

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