diff --git "a/2021/05/06/\345\274\200\345\247\213\345\206\231\344\270\252\344\272\272\345\215\232\345\256\242\344\272\206/index.html" "b/2021/05/06/\345\274\200\345\247\213\345\206\231\344\270\252\344\272\272\345\215\232\345\256\242\344\272\206/index.html" index 5438983b..00e59222 100644 --- "a/2021/05/06/\345\274\200\345\247\213\345\206\231\344\270\252\344\272\272\345\215\232\345\256\242\344\272\206/index.html" +++ "b/2021/05/06/\345\274\200\345\247\213\345\206\231\344\270\252\344\272\272\345\215\232\345\256\242\344\272\206/index.html" @@ -152,10 +152,10 @@ } detectApple() })(window) -
加载中...

开始写个人博客了

博客搭建

经过两天的折腾,利用Hexo框架和github托管的方式搭建的静态博客也算有了个雏形,这两天将继续对其进行美化以及添加新功能,今后打算在这里不定期分享一些自己感兴趣的编程、数码、游戏相关的内容。

+
加载中...

开始写个人博客了

博客搭建

经过两天的折腾,利用Hexo框架和github托管的方式搭建的静态博客也算有了个雏形,这两天将继续对其进行美化以及添加新功能,今后打算在这里不定期分享一些自己感兴趣的编程、数码、游戏相关的内容。

搭建博客的目的

一方面是想锻炼自己的表达能力(我在这方面确实有所欠缺),另一方面也是想将自己感兴趣的内容分享出去,既加深了自己对知识的理解,也能让他人学到新东西。

博客的内容

包含但不限于编程、游戏、数码相关内容,只要是我觉得有分享价值的东西,都有可能出现在博文中。

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/05/06/%E5%BC%80%E5%A7%8B%E5%86%99%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E4%BA%86/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
-
加载中...

让批处理文件中的中文正常显示

最近在学习DOS命令和批处理相关内容的时候,遇到了点问题,就是在执行包含中文的批处理文件时,中文无法正常显示,在查阅了相关资料之后,了解了一些编码相关的内容。

+
加载中...

让批处理文件中的中文正常显示

最近在学习DOS命令和批处理相关内容的时候,遇到了点问题,就是在执行包含中文的批处理文件时,中文无法正常显示,在查阅了相关资料之后,了解了一些编码相关的内容。

@@ -182,7 +182,7 @@

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/05/11/%E8%AE%A9%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E4%B8%AD%E6%96%87%E6%AD%A3%E5%B8%B8%E6%98%BE%E7%A4%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
-
加载中...

文件路径的表示方法

文件路径作为计算机基础内容,在很多时候都扮演着十分重要的角色,例如控制台命令、资源文件的存放等等,以下将介绍计算机文件路径的表示方法以及一些常见的使用场景。

+
加载中...

文件路径的表示方法

文件路径作为计算机基础内容,在很多时候都扮演着十分重要的角色,例如控制台命令、资源文件的存放等等,以下将介绍计算机文件路径的表示方法以及一些常见的使用场景。

文件路径的表示分为两种方式:绝对路径表示法和相对路径表示法。

@@ -168,7 +168,7 @@

如果要更改执行目录为其他盘符下的目录,可以先输入“<硬盘符>”,比方说要切换到上图试图切换的目录,可以先输入D:,然后再选择绝对路径。

程序中资源的引用

如果想要在编写的程序中引用外部资源文件(图片、音频等等),则必须要用相对路径,除非你编写的程序只需要在你当前设备上运行。因为你的程序往往放在一个大的文件夹当中,当这个大的文件夹被放置在计算机不同目录下时,资源文件的绝对路径也不相同,而源代码与资源文件之间的相对位置则是保持不变的,这保证了只要用户不刻意的去改变资源文件的存放位置,那么不管整个文件夹被放置在何处,资源文件都能被正常的引用。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/05/16/%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E7%9A%84%E8%A1%A8%E7%A4%BA%E6%96%B9%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

CSharp事件和委托

委托与事件在开发中的应用非常广泛,本文将简单介绍C#中委托和事件的定义、使用方法,以及它们之间的区别和联系。

+
加载中...

CSharp事件和委托

委托与事件在开发中的应用非常广泛,本文将简单介绍C#中委托和事件的定义、使用方法,以及它们之间的区别和联系。

委托

C#中的委托(delegate)类似于C/C++中的函数指针,是一种存在对某个方法的引用的引用类型变量,所有的委托都派生自System.Delegate类。

@@ -280,7 +280,7 @@

当输入值为5(与初始化value值不同),输出结果如下:

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/05/29/CSharp%E4%BA%8B%E4%BB%B6%E5%92%8C%E5%A7%94%E6%89%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

Crypto基础

密码学是研究编制密码和破译密码的技术科学,本文将主要介绍密码学中常见的几种加密方式的原理以及实际的应用,并以攻防世界新手练习区例题为例进行分析。

+
加载中...

Crypto基础

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/08/09/Crypto%E5%9F%BA%E7%A1%80/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

hexo博客的备份与恢复

为了防止误操作或计算机崩溃导致的博客源文件丢失,或满足我们更换电脑进行写作的需求,定期进行备份与恢复就显得很重要了。

+
加载中...

hexo博客的备份与恢复

为了防止误操作或计算机崩溃导致的博客源文件丢失,或满足我们更换电脑进行写作的需求,定期进行备份与恢复就显得很重要了。

备份

需备份的文件目录

我们在进行备份时,并不需要将整个博客目录全部备份,只备份以下几个用户自定义的即可:scaffolds目录,source目录,themes目录,.gitignore文件,_config.yml文件,package.json文件,其他都是通用的。

@@ -203,7 +203,7 @@

安装Hexo

在cmd中输入npm install -g hexo-cli

初始化Hexo

在想要保存hexo目录的位置,右键打开git bash here(也可以cmd进入此目录),执行hexo init

恢复备份文件

将备份的六个文件和目录覆盖到当前博客目录,恢复操作完成,可以hexo ghexo s进行检验。

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/08/25/hexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

ZIP格式分析

最近遇到一道CTF题是和zip格式编码相关的,正好我一直以来就对各文件格式编码没有一个系统的认知,就趁这个机会好好学习一下。

+
加载中...

ZIP格式分析

最近遇到一道CTF题是和zip格式编码相关的,正好我一直以来就对各文件格式编码没有一个系统的认知,就趁这个机会好好学习一下。

简介

@@ -302,7 +302,7 @@

例题

题目链接

你猜猜

分析与解答

由于对ZIP格式编码不熟悉,刚看到这一串字符以为是某种加密方式,在学习过本文后在看,很明显504B0304为ZIP格式的文件头标识位,因此我们打开010Editor,导入这一串16进制编码,并保存为ZIP格式。解压时发现设置了密码,考虑密码应该不会太复杂,直接暴力破解得到结果。

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/08/29/ZIP%E6%A0%BC%E5%BC%8F%E5%88%86%E6%9E%90/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

链表连接出错

太久没接触数据结构了,导致链表这一块的内容有点生疏了,这两天在做一道链表相关的题时出现了一点问题,在此记录一下以免之后再犯。

+
加载中...

链表连接出错

太久没接触数据结构了,导致链表这一块的内容有点生疏了,这两天在做一道链表相关的题时出现了一点问题,在此记录一下以免之后再犯。

问题描述

题目链接

两数相加

@@ -249,7 +249,7 @@

} }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/08/31/%E9%93%BE%E8%A1%A8%E8%BF%9E%E6%8E%A5%E5%87%BA%E9%94%99/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

位运算基础及应用

计算机中的数据以二进制的形式存储,即0、1两种状态。位运算就是直接对整数在内存中的二进制位进行操作。本文将介绍位运算的各操作符以及常见应用。

+
加载中...

位运算基础及应用

计算机中的数据以二进制的形式存储,即0、1两种状态。位运算就是直接对整数在内存中的二进制位进行操作。本文将介绍位运算的各操作符以及常见应用。

操作符

&(与)

参加运算的两个数据,按二进制位进行与运算。(两位都为1时才为1,否则为0)

@@ -187,7 +187,7 @@

return res == 1 ? true : false; } -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/09/26/%E4%BD%8D%E8%BF%90%E7%AE%97%E5%9F%BA%E7%A1%80%E5%8F%8A%E5%BA%94%E7%94%A8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

C++比较函数cmp

本文将简单介绍C++比较函数 cmp.

+
加载中...

C++比较函数cmp

本文将简单介绍C++比较函数 cmp.

排序函数sort()

sort函数是我们常用的库函数,它的参数如下:

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare cmp);
@@ -222,7 +222,7 @@

例题} }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/11/19/C++%E6%AF%94%E8%BE%83%E5%87%BD%E6%95%B0cmp/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

记一次CTF校赛

本文记录一下刚刚结束的CTF校赛,感觉本次校赛题目出得实在有点坑,但也算学到了不少东西。

+
加载中...

记一次CTF校赛

本文记录一下刚刚结束的CTF校赛,感觉本次校赛题目出得实在有点坑,但也算学到了不少东西。

Crypto

easy_ECC

问题描述

已知椭圆曲线加密Ep(a,b)参数为
@@ -330,7 +330,7 @@ 

故使用百度识图得到图片人物为吉克隽逸,最终得到压缩包密码为她的生日 19880513。

解压后得到一个音频文件,为她演唱的一首歌,在歌的末尾含有一串摩尔斯电码,观察该音频文件的波形图并记录下摩尔斯电码并解密,得到**JNCTFDOY0UTH1NKYOUARERI9HT?**,显然,这是一个虚假的 flag。

个人认为,坑不是不能有,但得到这样错误结果的代价也是不小的,且正确解法与错误解法之间完全没有任何联系,希望出题人能平衡好这其中的差别。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2021/12/04/%E8%AE%B0%E4%B8%80%E6%AC%A1CTF%E6%A0%A1%E8%B5%9B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

2021年游戏总结 上

​ 转眼间 2021 年已经过去,这一年间也体验了很多不同平台、不同类型的作品。本文将对此做一个小小的总结,内容主要是个人对 2021 年玩过的游戏的一些个人想法。此外,由于篇幅受限,因此并不会包含所有的游戏,部分体验不够深入的或者无话可聊的游戏将不会出现。

+
加载中...

2021年游戏总结 上

​ 转眼间 2021 年已经过去,这一年间也体验了很多不同平台、不同类型的作品。本文将对此做一个小小的总结,内容主要是个人对 2021 年玩过的游戏的一些个人想法。此外,由于篇幅受限,因此并不会包含所有的游戏,部分体验不够深入的或者无话可聊的游戏将不会出现。

双人成形

这算是今年玩过的最开心的游戏了,和两个室友花了大概 15 小时通关。

@@ -208,7 +208,7 @@

此外本作基本舍弃了那些与叙事无关的“小游戏”部分,个人认为这是非常明智的选择。前两作可能是为了更加贴近所谓的游戏,而比较强行地加入类似拼图等小游戏,但这些与游戏实际玩法割裂的部分在我看来实际上打乱了游戏的节奏。而本作在叙事上给我的感受就是流畅,全程无尿点,时刻都有一定的悬念吸引着玩家。

虽然本作与前两部作品在剧情上并无直接关联,但还是建议至少游玩前面任意一作体验会更好。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/01/05/2021%E5%B9%B4%E6%B8%B8%E6%88%8F%E6%80%BB%E7%BB%93%20%E4%B8%8A/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

2021年游戏总结 下

本文承接上文,继续聊聊 2021 年我所体验的一些游戏。

+
加载中...

2021年游戏总结 下

本文承接上文,继续聊聊 2021 年我所体验的一些游戏。

伊苏8:丹娜的陨涕日

今年玩过最喜欢的 jrpg 作品,几乎满足了我对于一款优秀 jrpg 的全部幻想。

@@ -212,7 +212,7 @@

最后,也是我最难以忍受的一点,就是等级压制过于严重。如果只做主线任务,玩家无法达到继续推进主线任务的推荐等级,而且等级之间的数值差距非常悬殊,通常越个两三级就很容易被秒杀。但支线任务往往并不有趣,这使得后期的游戏体验直线下降,只想快速通关。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/01/10/2021%E5%B9%B4%E6%B8%B8%E6%88%8F%E6%80%BB%E7%BB%93%20%E4%B8%8B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

LeetCode周赛总结 第276场

本次周赛相对比较简单,前三题花的时间比较短,但无奈最后一题还是没思路。。。

+
加载中...

LeetCode周赛总结 第276场

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/01/16/LeetCode%E5%91%A8%E8%B5%9B%E6%80%BB%E7%BB%93%20%E7%AC%AC276%E5%9C%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

使用OpenGL渲染一个立方体

本文将介绍如何使用最为常用的图形 API —— OpenGL 来渲染一个立方体,代码部分来自于《Computer Graphics Programming in OpenGL with C++》,并加入了自己的理解。

+
加载中...

使用OpenGL渲染一个立方体

本文将介绍如何使用最为常用的图形 API —— OpenGL 来渲染一个立方体,代码部分来自于《Computer Graphics Programming in OpenGL with C++》,并加入了自己的理解。

基本过程

环境配置

在编写程序之前,需要先配置好一些有助于程序编写的第三方库,本次实验需要用到的库有三个:用于窗口管理的 GLFW 库,扩展功能的 GLEW 库,以及用于数学运算的 GLM 库。

@@ -436,7 +436,7 @@

= proj_matrix * mv_matrix * vec4(position, 1.0); } -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/01/19/%E4%BD%BF%E7%94%A8OpenGL%E6%B8%B2%E6%9F%93%E4%B8%80%E4%B8%AA%E7%AB%8B%E6%96%B9%E4%BD%93/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

LeetCode周赛总结 第277场

本次周赛没想到比上周还要简单,前三题都可以用非常简单的方法快速解决,第四题如果想对了方向其实也比较简单。

+
加载中...

LeetCode周赛总结 第277场

本次周赛没想到比上周还要简单,前三题都可以用非常简单的方法快速解决,第四题如果想对了方向其实也比较简单。

元素计数

题目链接

元素计数

@@ -261,7 +261,7 @@

} }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/01/23/LeetCode%E5%91%A8%E8%B5%9B%E6%80%BB%E7%BB%93%20%E7%AC%AC277%E5%9C%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

C++复合类型的声明

声明语句的构成

+
加载中...

C++复合类型的声明

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/03/03/C++%E5%A4%8D%E5%90%88%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%A3%B0%E6%98%8E/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

C++代码优化 Chapter1

本文将介绍一些常见的 C++ 代码优化技巧,本文为该系列的第一章,未来不定期更新。

+
加载中...

C++代码优化 Chapter1

本文将介绍一些常见的 C++ 代码优化技巧,本文为该系列的第一章,未来不定期更新。

使用前置递增(递减)运算符

可能很多从 C 语言开始学习的朋友会对此感到困惑,觉得这两者在适用的情况下可以任意选择,如 for 循环语句写作 for (int i = 0; i < n; i++) 。这样做当然没错,但会造成一定程度上的资源浪费,因为后置递增运算符需要先将原本的变量值保存下来,再对其进行递增操作,而在此 for 循环中,我们并不需要使用原本的 i 值。并且 ++i 的写法相对来说更符合我们的意愿。

@@ -229,7 +229,7 @@

}

当我们希望原地构造时,emplace_back() 参数与元素对象类型的构造函数相同。同样的我们也可以传入一个已经存在的对象,这样效果和 push_back() 相同。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/03/04/C++%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96%20Chapter1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

子集生成算法

本文介绍生成一个集合子集的两种常见算法,借此从中深入理解搜索问题中常见的两种思路。

+
加载中...

子集生成算法

本文介绍生成一个集合子集的两种常见算法,借此从中深入理解搜索问题中常见的两种思路。

递归回溯

思路

对于集合中的每个元素,我们都有选择和不选择两种处理方式,这种思路类似于二叉树的遍历,每种情况都向下衍生出两种情况,最终当遍历到下标 index = nums.size() 时,将生成的子集保存。

@@ -200,7 +200,7 @@

} }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/03/16/%E5%AD%90%E9%9B%86%E7%94%9F%E6%88%90%E7%AE%97%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

OpenGL入门 矩阵堆栈实现简单行星系统

本文介绍如何使用矩阵堆栈原理实现简单的行星运行系统。

+
加载中...

OpenGL入门 矩阵堆栈实现简单行星系统

本文介绍如何使用矩阵堆栈原理实现简单的行星运行系统。

原理

有时我们需要在一个场景中绘制不同的模型,如果这些模型彼此间没有联系,即各模型的位置不会相互影响,那我们只需要单独为每个模型创建合适的变换矩阵,并经过渲染管线将其渲染即可。而对于一个位置会相互影响的系统而言,例如行星运行系统,地球围绕太阳公转,而月球围绕地球公转。处理这样问题的关键在于如何确定各物体变换矩阵,准确来说是模型-视图矩阵。而矩阵堆栈可以很好地将这问题简化。
所谓矩阵堆栈,就一个用来存储变换矩阵的堆栈结构,栈顶矩阵为栈底矩阵乘上另一个矩阵变换而来,由此,栈底到栈顶形成一个逐步复杂的结构。通常来说,栈底的矩阵为视图矩阵,因为对于一个场景中的每个物体,它们都要经过视图矩阵的变换。逐步往上,由父物体的变换矩阵先入栈,利用栈顶矩阵作为该物体的模型-视图矩阵绘制物体后,再进入其子物体的管线,依次逐步进行。同时,对于不希望由父物体继承给子物体的变换矩阵可以在绘制完父物体后将其出栈。

实现

代码实现

对于本文所要研究的行星运行系统,共有三个物体:太阳、地球、月球,它们的依赖关系是:地球围绕太阳公转,而月球围绕地球公转。矩阵堆栈的变换情况如下:

@@ -203,7 +203,7 @@

实现运行效果

项目链接

本项目已上传 github 仓库,如果想要查看项目的完整代码,可以自行访问。

项目链接

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/03/17/OpenGL%E5%85%A5%E9%97%A8%20%E7%9F%A9%E9%98%B5%E5%A0%86%E6%A0%88%E5%AE%9E%E7%8E%B0%E7%AE%80%E5%8D%95%E8%A1%8C%E6%98%9F%E7%B3%BB%E7%BB%9F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

循环语句中指针赋值出错

最近在写人工智能作业的时候遇到了一点问题,就是在循环语句中对指针类型赋值出现错误,导致所有的结点的前驱指针最终指向自身。

+
加载中...

循环语句中指针赋值出错

最近在写人工智能作业的时候遇到了一点问题,就是在循环语句中对指针类型赋值出现错误,导致所有的结点的前驱指针最终指向自身。

问题描述

以下使用一个简单的示例来模拟当时出现的问题。

@@ -187,7 +187,7 @@

问题原因

如果仔细观察,变量 fs 在整个循环过程中都占用同一片内存空间,而子节点的前驱结点 pre 直接指定为了 fs 的地址,那么如果 fs 的值遭到改变,即该地址的数据被改变,那么结点的前驱结点 pre 也会被改变。即下次循环执行 MyStruct fs = Q.front(); 后结点的前驱结点就遭到了改变,且指向了自身。

解放方法

由于 fs 的始终占用一片内存空间,为了防止因 fs 的数据被改变而使得结点前驱结点数据遭到改变,可以为结点的前驱结点重新开辟一片内存空间并赋予当前 fs 的数据。

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/03/30/%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5%E4%B8%AD%E6%8C%87%E9%92%88%E8%B5%8B%E5%80%BC%E5%87%BA%E9%94%99/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

C++代码优化 Chapter2

本文将继续介绍一些常见的 C++ 代码优化技巧,本文为该系列的第二章,未来不定期更新。

+
加载中...

C++代码优化 Chapter2

本文将继续介绍一些常见的 C++ 代码优化技巧,本文为该系列的第二章,未来不定期更新。

非必要时使用常量引用

在上一章我们介绍了在进行函数的参数传递时,尤其对于所占内存空间较大的参数的传递,为了避免拷贝所带来的不必要的性能开销,应当尽量使用引用传递。并且,当该函数不需要对传入的参数进行更改时,应当在参数类型前添加 const 关键字表示这是一个常量引用。

@@ -188,7 +188,7 @@

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/04/12/C++%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96%20Chapter2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
-
加载中...

人工智能作业 使用AStar算法解决八数码问题

八数码问题是一个经典的搜索问题,本文将介绍如何使用启发式搜索—— AStar 算法来求解八数码问题。

+
加载中...

人工智能作业 使用AStar算法解决八数码问题

八数码问题是一个经典的搜索问题,本文将介绍如何使用启发式搜索—— AStar 算法来求解八数码问题。

使用AStar算法解决八数码问题

问题描述

@@ -262,7 +262,7 @@

代码运行结果

输入

原状态:283164705, 目标状态:123804765

输出

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/04/27/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%BD%9C%E4%B8%9A%20%E4%BD%BF%E7%94%A8AStar%E7%AE%97%E6%B3%95%E8%A7%A3%E5%86%B3%E5%85%AB%E6%95%B0%E7%A0%81%E9%97%AE%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

人工智能作业 使用K-means算法进行聚类分析

本文将介绍如何使用 K-means 算法对给定的坐标数据进行聚类分析。

+
加载中...

人工智能作业 使用K-means算法进行聚类分析

本文将介绍如何使用 K-means 算法对给定的坐标数据进行聚类分析。

使用K-means算法进行聚类分析

问题描述

@@ -386,7 +386,7 @@

可见,由于初始中心点的选取不同,最终导致聚类的结果产生了差异,且本次聚类的结果相对来说不够合理。

实验体会

本次实验算法原理并不复杂,关键在于对文本数据的提取与转换,以及将数据可视化的绘制在屏幕上。文本数据提取部分我采用了文件IO流与字符串转换函数stod()。而数据可视化方面,由于本实验只有其画点这一极为基础的图形需求,因此我采用了一个较为轻量化图形库easyX,使用简单且代码量很少。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/04/27/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%BD%9C%E4%B8%9A%20%E4%BD%BF%E7%94%A8K-means%E7%AE%97%E6%B3%95%E8%BF%9B%E8%A1%8C%E8%81%9A%E7%B1%BB%E5%88%86%E6%9E%90/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

停止等待协议的模拟实现

协议原理

+
加载中...

停止等待协议的模拟实现

协议原理

设计思路

基本传输

本次实验我采用了程序模拟的方式实现。发送方和接收方都为一个数组,传输过程即为发送方数组向接收方数组传递数据,并使用随机数生成的方式模拟传输过程中可能出现的差错,并且传输时间也为一个在 50 - 150 ms 间的随机数,用一个迭代器来模拟此时发送方的数据位置。

传输过程为一个循环语句,终止条件为发送迭代器到达发送方数组的末尾位置。

选择重传

每次进行传输,传输时间就会累加,在一轮传输的最后判断累计时间是否超过了规定 tout,如果未超过,代表数据成功接收,发送迭代器自增 1。 否则,不进行操作,下一次循环将会再次尝试发送该数据。

@@ -232,7 +232,7 @@

}

运行效果

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/05/05/%E5%81%9C%E6%AD%A2%E7%AD%89%E5%BE%85%E5%8D%8F%E8%AE%AE%E7%9A%84%E6%A8%A1%E6%8B%9F%E5%AE%9E%E7%8E%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

人工智能作业 使用遗传算法解决旅行商问题

遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。本文利用遗传算法解决经典的NP问题——旅行商问题,并加深对该算法的理解。

+
加载中...

人工智能作业 使用遗传算法解决旅行商问题

遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。本文利用遗传算法解决经典的NP问题——旅行商问题,并加深对该算法的理解。

问题描述

有若干个城市,每个城市给定一个坐标,一个旅行商需要经过每个城市各一遍且不能重复经过城市,起点可以任意选择,求旅行商经过所有城市的总距离的最小值及其最优路径。

@@ -416,7 +416,7 @@

总结实验中遇到的最多的问题还是在交叉遗传部分,对于该部分算法的选择与设计花了不少功夫,起初为了方便起见,本想直接采取双亲基因序列各取一部分的方式,但这种方式在 TSP 问题中显然是不适用的,因为这样拼接而成的子代无法保证 TSP 问题所要求的“每个城市各走一遍”的原则。最终在权衡之下,选择了 Subtour Exchange Crossover 算法,代码实现不算复杂且性能良好。

另一个问题就是遗传算法的收敛速度较慢,我在多次进行试验之后发现对于一个 127 个点的数据,算法普遍会在 15000 次之后基本收敛,因此循环次数设定为了 20000 次,以便更好地对数据进行分析。

变异概率的设定同样值得考虑,一般设定在 0.01~0.1,因为变异并不总是有利的,因此不宜过大;同样不宜过小,否则不易得到最优的结果,收敛速度将更慢。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/05/26/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%BD%9C%E4%B8%9A%20%E4%BD%BF%E7%94%A8%E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95%E8%A7%A3%E5%86%B3%E6%97%85%E8%A1%8C%E5%95%86%E9%97%AE%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

Ping命令的实现

Ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。本文将基于 Socket 编程,实现一个基本的 Ping 命令程序。

+
加载中...

Ping命令的实现

Ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。本文将基于 Socket 编程,实现一个基本的 Ping 命令程序。

ICMP 报文分析

ICMP 报文捕获

在控制台输入 ping 202.195.147.248,对该目的主机发起请求,可以看到控制台输出了一系列统计信息:4 个数据包全部接收并且往返时间为 5 ms(较短),表明与该主机之间的连接畅通。

@@ -335,7 +335,7 @@

可见,本地与该目的主机无法连通。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/05/31/Ping%E5%91%BD%E4%BB%A4%E7%9A%84%E5%AE%9E%E7%8E%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

用DFS解决最终幻想13-2时钟谜题

最近在补 XGP 中的最终幻想13-2时,遇到一个时钟谜题,感觉挺有意思,就像尝试用搜索算法将其解决。

+
加载中...

用DFS解决最终幻想13-2时钟谜题

最近在补 XGP 中的最终幻想13-2时,遇到一个时钟谜题,感觉挺有意思,就像尝试用搜索算法将其解决。

问题描述

如下图所示,有一个时钟,包含个结点,每个节点有一个数字标识,玩家最开始可以任意选择一个结点,选择后,该结点被消除且指针会指向该结点的位置,根据该节点的数字值 n 分裂为两根指针分别向顺时针方向和逆时针方向旋转 n 个的单位长度。此后每次玩家只能选择指针指向的结点,选择结点后结点被消除,两指针合并指向选择结点的位置并按上述描述进行分裂和旋转,玩家需要将所有节点消除才能胜利。

@@ -221,7 +221,7 @@

结果分析

以下为示例图中问题的所有解路径,经验证,符合条件。

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2022/08/08/%E7%94%A8DFS%E8%A7%A3%E5%86%B3%E6%9C%80%E7%BB%88%E5%B9%BB%E6%83%B313-2%E6%97%B6%E9%92%9F%E8%B0%9C%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

LeetCode周赛总结 第327场

由于考研等因素的影响,已经时隔一年没有参加力扣周赛了,长时间没有好好琢磨算法题,思维敏捷度确实有所下降,好在这次周赛前两题都没有什么难度,但第三题却把简单问题想复杂了,第四题就基本上都没怎么读题了。。。

+
加载中...

LeetCode周赛总结 第327场

由于考研等因素的影响,已经时隔一年没有参加力扣周赛了,长时间没有好好琢磨算法题,思维敏捷度确实有所下降,好在这次周赛前两题都没有什么难度,但第三题却把简单问题想复杂了,第四题就基本上都没怎么读题了。。。

正整数和负整数的最大计数

题目链接

正整数和负整数的最大计数

@@ -251,7 +251,7 @@

return false; } }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/01/08/LeetCode%E5%91%A8%E8%B5%9B%E6%80%BB%E7%BB%93%20%E7%AC%AC327%E5%9C%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
-
加载中...

2022年游戏总结

今年由于要准备考研,博客几乎没怎么更新,游戏玩的也比较少,算上填坑、试玩、弃坑的粗略计算大概 20 款,其中不乏近年的新游戏以及一直想补的老游戏,以下是从中选出的几款个人觉得比较有的聊的作品。

+
加载中...

2022年游戏总结

今年由于要准备考研,博客几乎没怎么更新,游戏玩的也比较少,算上填坑、试玩、弃坑的粗略计算大概 20 款,其中不乏近年的新游戏以及一直想补的老游戏,以下是从中选出的几款个人觉得比较有的聊的作品。

勇者斗恶龙11s 寻觅逝去的时光

@@ -195,7 +195,7 @@

音乐部分也值得一提,本作音乐其实单拿出来听似乎并不算很好听,能给人留下印象的也不多,但与故事剧情的结合却非常好,音乐总会在剧情的某一关键节点响起,与制作组精心准备的演出相结合,给玩家带来足够的情感冲击。另外,本作现在的版本是加入了配音的,包括中文和日文配音,因为觉得台配的中文配音稍微有点出戏,就选择了日文配音。

我个人其实很少玩 galgame 那样的纯文字冒险游戏,即便它们中很多都有跌宕起伏的故事情节,但完全没有可操作部分也让我很难只为了故事本身而完成游戏流程。而像《龙脉常歌》这样的游戏模式我却很喜欢,本作也存在一些诸如模拟经营和解谜的玩法,但都设计的非常轻度,属于是故事情节与情节之间衔接的过渡元素,能够很好的调节游戏节奏。飞船虽然也有油量和耐久度的限定,但都在制作组的掌控之中,实际上只要按正常流程走基本不会出现数值见底的情况,这个限制的加入更多是为了营造星际航行时的紧张感,而非给玩家出的难题。gameplay 缺乏挑战和负担也可以让玩家更加专注于游戏所要传达的故事本身,而不至于因此分散了注意力,这也是前作《灵魂之桥》我觉得做得不够好的地方,“雪地探索捡垃圾”的玩法对于这类叙事游戏来说还是稍显繁琐。

本作我其实已经加入 steam 心愿单已久,却没想直接加入 xgp 了。通关了 xgp 的版本之后,出于对本作的喜爱,我又赶在 ns 版本打折的时候又买了一份,也算是对制作组的支持,希望它们的下一部作品能够做得更好。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/01/12/2022%E5%B9%B4%E6%B8%B8%E6%88%8F%E6%80%BB%E7%BB%93/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

LeetCode周赛总结 第331场

从数量最多的堆取走礼物

题目链接

从数量最多的堆取走礼物

+
加载中...

LeetCode周赛总结 第331场

从数量最多的堆取走礼物

题目链接

从数量最多的堆取走礼物

解题思路

直接按照流程模拟即可,将数组 gifts 的元素放入优先队列中,然后每次从中选出最大值 maxGift,再将 sqrt(maxGift) 放回队列,重复 k 次,计算队列剩余的值总和。

解题代码

class Solution {
 public:
@@ -243,7 +243,7 @@ 

} };

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/02/05/LeetCode%E5%91%A8%E8%B5%9B%E6%80%BB%E7%BB%93%20%E7%AC%AC331%E5%9C%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

LeetCode周赛总结 第333场

合并两个二维数组 - 求和法

题目链接

合并两个二维数组 - 求和法

+
加载中...

LeetCode周赛总结 第333场

合并两个二维数组 - 求和法

题目链接

合并两个二维数组 - 求和法

解题思路

本题较为基础,可以直接分别遍历两数组,再用哈希表记录两数组中各编号的累加和,但该方法比较消耗空间,时间上的性能也不理想。

考虑到数组 nums1 和 nums2 都包含互不相同的 id,并按 id 以递增顺序排列,因此想到利用归并排序的思想,设立双指针 p1 和 p2,若两指针所指数组元素的 id 相同,则将 { nums1[p1][0], nums1[p1][1] + nums2[p2][1] } 进行归并,否则将较小 id 的元素(假设 p1 所指元素 id 更小) { nums1[p1][0], nums1[p1][1] } 进行归并。

解题代码

class Solution {
@@ -204,7 +204,7 @@ 

return min(minOperations(n1 - n), minOperations(n - n2)) + 1; } };

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/02/19/LeetCode%E5%91%A8%E8%B5%9B%E6%80%BB%E7%BB%93%20%E7%AC%AC333%E5%9C%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

LeetCode周赛总结 第334场

左右元素和的差值

题目链接

左右元素和的差值

+
加载中...

LeetCode周赛总结 第334场

左右元素和的差值

题目链接

左右元素和的差值

解题思路

直接按照题目要求模拟即可,两次遍历求出 leftSum 和 rightSum,再计算得出 answer.

解题代码

class Solution {
 public:
@@ -233,7 +233,7 @@ 

return 2 * res; } };

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/02/26/LeetCode%E5%91%A8%E8%B5%9B%E6%80%BB%E7%BB%93%20%E7%AC%AC334%E5%9C%BA/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

C++中的静态(static)

一般来说,C++ 中的 static 关键字具有不同的含义,而这取决于它的使用场景。

+
加载中...

C++中的静态(static)

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/03/01/C++%E4%B8%AD%E7%9A%84%E9%9D%99%E6%80%81(static)/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

C++面试题总结

由于考研失利,最近在准备春招,想要找一份游戏客户端开发的岗位,便想要将 C++ 常见的面试题整理出来。题目来自牛客网的 C++ 面试题库,答案结合了牛客网给出的参考答案、new bing 给出的回答以及个人的理解和思考。

+
加载中...

C++面试题总结

由于考研失利,最近在准备春招,想要找一份游戏客户端开发的岗位,便想要将 C++ 常见的面试题整理出来。题目来自牛客网的 C++ 面试题库,答案结合了牛客网给出的参考答案、new bing 给出的回答以及个人的理解和思考。

C++ 和 C 中 struct 的区别,以及 C++ 中 struct 和 class 的区别

C++ 和 C 中 struct 的区别

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
目录
  1. 1. C++ 和 C 中 struct 的区别,以及 C++ 中 struct 和 class 的区别
    1. 1.1. C++ 和 C 中 struct 的区别
    2. 1.2. C++ 中 struct 和 class 的区别
  2. 2. static 关键字的作用
  3. 3. 什么是野指针,怎么产生,如何避免
    1. 3.1. 什么是野指针
    2. 3.2. 野指针如何产生
    3. 3.3. 野指针如何避免
  4. 4. C 和 C++ 的区别
  5. 5. 使用 const 和 define 定义常量的区别
  6. 6. extern 的作用,extern 变量在内存的哪个数据段,为什么要 extern C
    1. 6.1. extern 的作用
    2. 6.2. extern 变量存储在在内存的哪个数据段
    3. 6.3. 为什么要 extern C
  7. 7. const 关键字的用法
  8. 8. 各类型的 sizeof() 是多少,指针的 sizeof() 是多少,sizeof() 实现原理
    1. 8.1. 各类型的 sizeof() 值
    2. 8.2. 指针的 sizeof() 值
    3. 8.3. sizeof() 实现原理
  9. 9. C 语言的 volatile 有什么用,可以和 const 同时使用吗
    1. 9.1. volatile 的作用
    2. 9.2. 可以和 const 同时使用吗
  10. 10. C++ 引用的概念
  11. 11. 指针和引用的区别
  12. 12. 内联函数的作用
  13. 13. 简述 C++ 的内存管理
  14. 14. 堆空间和栈空间的区别
  15. 15. 什么是内存泄漏,如何避免,如何检测
    1. 15.1. 什么是内存泄漏
    2. 15.2. 如何避免
    3. 15.3. 如何检测
  16. 16. 简述 C++ 的内存对齐
    1. 16.1. 什么是内存对齐
    2. 16.2. 内存对齐的原因
    3. 16.3. 内存对齐的规则
  17. 17. 简述 malloc() 的实现原理
  18. 18. 简述 new 的实现原理,new 和 malloc() 的区别是什么
    1. 18.1. new 的实现原理
    2. 18.2. new 和 malloc() 的区别
  19. 19. 简述 delete 和 free() 的区别
  20. 20. 简述一下什么是面向对象
  21. 21. 简述一下 C++ 的重载和重写
  22. 22. 简述一下面向对象的三大特征
  23. 23. 简述一下浅拷贝和深拷贝
  24. 24. 简述一下 C++ 的多态
  25. 25. 简述一下虚函数的实现原理
  26. 26. 什么是纯虚函数,有什么作用
  27. 27. 虚析构函数有什么作用
  28. 28. 重载、重写、隐藏有什么区别
  29. 29. 什么情况会调用拷贝构造,什么时候会调用赋值操作
  30. 30. 虚函数可以是内联函数吗
  31. 31. 简述虚函数与纯虚函数的区别
  32. 32. 简述 C++ 的四种类型转换
  33. 33. STL 中有哪些常见的容器
  34. 34. vector 和 list 有什么区别,分别适用于什么场景
  35. 35. 简述 vector 的实现原理
  36. 36. 迭代器失效的原因是什么,有哪些情况
  37. 37. 简述 deque 的实现原理
  38. 38. 简述 set 的实现原理
  39. 39. 简述 map 的实现原理,各操作的时间复杂度是多少
  40. 40. 简述红黑树的特性,为什么要有红黑树
    1. 40.1. 红黑树的特性
    2. 40.2. 为什么要有红黑树
  41. 41. 简述 unordered_map 的实现原理
  42. 42. 简述哈希冲突的原因、影响因素和解决办法
    1. 42.1. 原因
    2. 42.2. 影响因素
    3. 42.3. 解决办法
  43. 43. 简述 map 和 unordered_map 的区别
  44. 44. C++ 智能指针和指针的区别是什么
  45. 45. weak_ptr 如何解决 shared_ptr 的循环引用问题
  46. 46. shared_ptr 如何得知与它共享对象的指针被释放
  47. 47. 智能指针有没有内存泄漏的情况
  48. 48. C++11 有哪些新特性
  49. 49. auto 和 decltype 如何使用
  50. 50. 简述 unique_ptr 的实现原理及使用场景
    1. 50.1. 实现原理
    2. 50.2. 使用场景
  51. 51. 简述左值、右值、左值引用、右值引用的使用场景
  52. 52. 简述 C++ lambda 表达式用法及实现原理
最新文章
打赏

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
目录
  1. 1. C++ 和 C 中 struct 的区别,以及 C++ 中 struct 和 class 的区别
    1. 1.1. C++ 和 C 中 struct 的区别
    2. 1.2. C++ 中 struct 和 class 的区别
  2. 2. static 关键字的作用
  3. 3. 什么是野指针,怎么产生,如何避免
    1. 3.1. 什么是野指针
    2. 3.2. 野指针如何产生
    3. 3.3. 野指针如何避免
  4. 4. C 和 C++ 的区别
  5. 5. 使用 const 和 define 定义常量的区别
  6. 6. extern 的作用,extern 变量在内存的哪个数据段,为什么要 extern C
    1. 6.1. extern 的作用
    2. 6.2. extern 变量存储在在内存的哪个数据段
    3. 6.3. 为什么要 extern C
  7. 7. const 关键字的用法
  8. 8. 各类型的 sizeof() 是多少,指针的 sizeof() 是多少,sizeof() 实现原理
    1. 8.1. 各类型的 sizeof() 值
    2. 8.2. 指针的 sizeof() 值
    3. 8.3. sizeof() 实现原理
  9. 9. C 语言的 volatile 有什么用,可以和 const 同时使用吗
    1. 9.1. volatile 的作用
    2. 9.2. 可以和 const 同时使用吗
  10. 10. C++ 引用的概念
  11. 11. 指针和引用的区别
  12. 12. 内联函数的作用
  13. 13. 简述 C++ 的内存管理
  14. 14. 堆空间和栈空间的区别
  15. 15. 什么是内存泄漏,如何避免,如何检测
    1. 15.1. 什么是内存泄漏
    2. 15.2. 如何避免
    3. 15.3. 如何检测
  16. 16. 简述 C++ 的内存对齐
    1. 16.1. 什么是内存对齐
    2. 16.2. 内存对齐的原因
    3. 16.3. 内存对齐的规则
  17. 17. 简述 malloc() 的实现原理
  18. 18. 简述 new 的实现原理,new 和 malloc() 的区别是什么
    1. 18.1. new 的实现原理
    2. 18.2. new 和 malloc() 的区别
  19. 19. 简述 delete 和 free() 的区别
  20. 20. 简述一下什么是面向对象
  21. 21. 简述一下 C++ 的重载和重写
  22. 22. 简述一下面向对象的三大特征
  23. 23. 简述一下浅拷贝和深拷贝
  24. 24. 简述一下 C++ 的多态
  25. 25. 简述一下虚函数的实现原理
  26. 26. 什么是纯虚函数,有什么作用
  27. 27. 虚析构函数有什么作用
  28. 28. 重载、重写、隐藏有什么区别
  29. 29. 什么情况会调用拷贝构造,什么时候会调用赋值操作
  30. 30. 虚函数可以是内联函数吗
  31. 31. 简述虚函数与纯虚函数的区别
  32. 32. 简述 C++ 的四种类型转换
  33. 33. STL 中有哪些常见的容器
  34. 34. vector 和 list 有什么区别,分别适用于什么场景
  35. 35. 简述 vector 的实现原理
  36. 36. 迭代器失效的原因是什么,有哪些情况
  37. 37. 简述 deque 的实现原理
  38. 38. 简述 set 的实现原理
  39. 39. 简述 map 的实现原理,各操作的时间复杂度是多少
  40. 40. 简述红黑树的特性,为什么要有红黑树
    1. 40.1. 红黑树的特性
    2. 40.2. 为什么要有红黑树
  41. 41. 简述 unordered_map 的实现原理
  42. 42. 简述哈希冲突的原因、影响因素和解决办法
    1. 42.1. 原因
    2. 42.2. 影响因素
    3. 42.3. 解决办法
  43. 43. 简述 map 和 unordered_map 的区别
  44. 44. C++ 智能指针和指针的区别是什么
  45. 45. weak_ptr 如何解决 shared_ptr 的循环引用问题
  46. 46. shared_ptr 如何得知与它共享对象的指针被释放
  47. 47. 智能指针有没有内存泄漏的情况
  48. 48. C++11 有哪些新特性
  49. 49. auto 和 decltype 如何使用
  50. 50. 简述 unique_ptr 的实现原理及使用场景
    1. 50.1. 实现原理
    2. 50.2. 使用场景
  51. 51. 简述左值、右值、左值引用、右值引用的使用场景
  52. 52. 简述 C++ lambda 表达式用法及实现原理
最新文章
-
加载中...

计算机基础面试题总结

承接上文,本文总结了计算机基础学科(包括数据结构、计算机组成原理、操作系统、计算机网络等)常见的一些面试问题,以便随时查看。

+
加载中...

计算机基础面试题总结

承接上文,本文总结了计算机基础学科(包括数据结构、计算机组成原理、操作系统、计算机网络等)常见的一些面试问题,以便随时查看。

常见的进程调度算法有哪些

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/03/11/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

有关C++字符串拷贝的一个小问题

最近面试被问到了一个 C++ 中的小问题,就是如果有字符串 s1 和 s2,将 s1 赋值给 s2 后,它们的内存分布是什么样的。当时感觉可能是共享的,但也不太确定,回来后查阅资料发现结果并不是那么简单。

+
加载中...

有关C++字符串拷贝的一个小问题

最近面试被问到了一个 C++ 中的小问题,就是如果有字符串 s1 和 s2,将 s1 赋值给 s2 后,它们的内存分布是什么样的。当时感觉可能是共享的,但也不太确定,回来后查阅资料发现结果并不是那么简单。

查阅资料

首先是询问 chatGPT 得到的答案,如下:

@@ -188,7 +188,7 @@

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/04/04/%E6%9C%89%E5%85%B3C++%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8B%B7%E8%B4%9D%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8F%E9%97%AE%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
-
加载中...

数据结构编程题 顺序表

删除最小值

题目描述

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

+
加载中...

数据结构编程题 顺序表

删除最小值

题目描述

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

解题代码

bool deleteMin(vector<int>& nums, int& val) {
     if (nums.empty()) {
         return false;
@@ -353,7 +353,7 @@ 

} return n + 1; }

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/07/03/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B%E9%A2%98%20%E9%A1%BA%E5%BA%8F%E8%A1%A8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

数据结构编程题 链表

链表定义

以下为本文解题代码的链表定义。

+
加载中...

数据结构编程题 链表

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/07/10/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B%E9%A2%98%20%E9%93%BE%E8%A1%A8/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

数据结构编程题 栈和队列

判断合法序列

题目描述

假设 I 和 O 分别表示入栈和出栈操作,栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由 I 和 O 组成的序列,可以操作的序列称为合法序列,否则称为非法序列。编写一个算法,判定所给的序列是否合法。若合法,返回 true,否则返回 false.

+
加载中...

数据结构编程题 栈和队列

判断合法序列

题目描述

假设 I 和 O 分别表示入栈和出栈操作,栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由 I 和 O 组成的序列,可以操作的序列称为合法序列,否则称为非法序列。编写一个算法,判定所给的序列是否合法。若合法,返回 true,否则返回 false.

解题代码

bool isLegalSequence(const string& sequence) {
     int iCnt = 0;
     for (int i = 0; i < sequence.size(); ++i) {
@@ -260,7 +260,7 @@ 

return v2; // 栈中剩下的唯一值 }

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/07/17/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B%E9%A2%98%20%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

数据结构编程题 二叉树

二叉树定义

以下为本文解题代码的二叉树定义。

+
加载中...

数据结构编程题 二叉树

二叉树定义

以下为本文解题代码的二叉树定义。

struct TreeNode {
 	int val;
 	TreeNode* left, *right;
@@ -542,7 +542,7 @@ 

return root; }

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/08/04/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B%E9%A2%98%20%E4%BA%8C%E5%8F%89%E6%A0%91/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
-
加载中...

数据结构编程题 图

图定义

邻接表

struct ArcNode { // 边结点
+
加载中...

数据结构编程题 图

图定义

邻接表

struct ArcNode { // 边结点
 	int verIdx, weight;
 	ArcNode* next;
 	ArcNode(int verIdx, int weight, ArcNode* next) : verIdx(verIdx), weight(weight), next(next) {}
@@ -325,7 +325,7 @@ 

printAllPathsDFS(G, vi, vj, visited, path); }

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/08/15/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B%E9%A2%98%20%E5%9B%BE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

数据结构编程题 查找

二叉树定义

以下为本文解题代码的二叉树定义。

+
加载中...

数据结构编程题 查找

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/08/18/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%BC%96%E7%A8%8B%E9%A2%98%20%E6%9F%A5%E6%89%BE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

常见排序算法

插入排序

直接插入

void insertSort(vector<int>& nums) {
+
加载中...

常见排序算法

插入排序

直接插入

void insertSort(vector<int>& nums) {
 	for (int i = 1; i < nums.size(); ++i) {
 		int j = i;
 		while (j >= 1 && nums[j] < nums[j - 1]) {
@@ -358,7 +358,7 @@ 

} } }

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/08/22/%E5%B8%B8%E8%A7%81%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

算法分析与设计编程题 递归与分治策略

棋盘覆盖

题目描述

+
加载中...

算法分析与设计编程题 递归与分治策略

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/08/26/%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90%E4%B8%8E%E8%AE%BE%E8%AE%A1%E7%BC%96%E7%A8%8B%E9%A2%98%20%E9%80%92%E5%BD%92%E4%B8%8E%E5%88%86%E6%B2%BB%E7%AD%96%E7%95%A5/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

算法分析与设计编程题 动态规划

矩阵连乘

题目描述

+
加载中...

算法分析与设计编程题 动态规划

矩阵连乘

题目描述

解题代码

void printOptimalParens(vector<vector<int>>& partition, int i, int j) {
 	if (i == j) cout << "A" << i; // 单个矩阵,无需划分
@@ -352,7 +352,7 @@ 

} return dp[1][n]; } -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/08/28/%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90%E4%B8%8E%E8%AE%BE%E8%AE%A1%E7%BC%96%E7%A8%8B%E9%A2%98%20%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

算法分析与设计编程题 贪心算法

活动安排问题

题目描述

+
加载中...

算法分析与设计编程题 贪心算法

活动安排问题

题目描述

解题代码

vector<bool> greedySelector(vector<vector<int>>& intervals) {
     int n = intervals.size();
@@ -429,7 +429,7 @@ 

Prim

}
 }
-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/09/02/%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90%E4%B8%8E%E8%AE%BE%E8%AE%A1%E7%BC%96%E7%A8%8B%E9%A2%98%20%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

算法分析与设计编程题 回溯法

装载问题

题目描述

+
加载中...

算法分析与设计编程题 回溯法

装载问题

题目描述

解题代码

递归回溯

// goods[i]表示货物i的重量, c1,c2分别表示货船1和货船2的载重量
 vector<vector<int>> optimalLoading(vector<int>& goods, int c1, int c2) {
 	int n = goods.size(); // 货物数量
@@ -550,7 +550,7 @@ 

} return res; }

-
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/09/09/%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90%E4%B8%8E%E8%AE%BE%E8%AE%A1%E7%BC%96%E7%A8%8B%E9%A2%98%20%E5%9B%9E%E6%BA%AF%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

二分搜索的几种写法与常见问题

最近在比赛和刷题的时候经常遇到二分答案的题,但时不时会因为一些细节上的错误而浪费时间,本文旨在整理常见的二分搜索的写法、二分搜索可能会遇到的一些小问题,以及 C++ 中与二分搜索相关的库函数,以免今后再犯类似的错误。

+
加载中...

二分搜索的几种写法与常见问题

最近在比赛和刷题的时候经常遇到二分答案的题,但时不时会因为一些细节上的错误而浪费时间,本文旨在整理常见的二分搜索的写法、二分搜索可能会遇到的一些小问题,以及 C++ 中与二分搜索相关的库函数,以免今后再犯类似的错误。

二分搜索的写法

查找某个值的下标

定义函数 binarySearch(nums, target) 为搜索有序数组 nums 中是否存在 i 使得 nums[i] == target,如果是,返回 i,否则返回 -1.

@@ -257,7 +257,7 @@

二分查找有几种写法?它们的区别是什么? - 知乎

二分查找中的循环不变式_二分搜索的循环不变式 - groovy2007的博客

std::lower_bound - cppreference.com

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/09/17/%E4%BA%8C%E5%88%86%E6%90%9C%E7%B4%A2%E7%9A%84%E5%87%A0%E7%A7%8D%E5%86%99%E6%B3%95%E4%B8%8E%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

高效的LeetCode二叉树本地IDE调试方案

在 LeetCode 刷题过程中,有时候遇到一些难以难以直接观察出来的错误,此时通常想要利用单步调试来解决,但奈何只有 LeetCode Plus 会员才可以使用其网页的调试功能。好在绝大部分本地 IDE 都具备十分强大的调试功能,我们只需要将自己的解题代码复制到本地,并编写简单的测试程序即可。但是对于二叉树相关的题,测试数据的编写显得不那么容易,本文编写了一个匹配 LeetCode 题目中的二叉树定义的类,该类包含一些基本的静态函数,能够很方便地实现二叉树的构造和二叉树的遍历。

+
加载中...

高效的LeetCode二叉树本地IDE调试方案

在 LeetCode 刷题过程中,有时候遇到一些难以难以直接观察出来的错误,此时通常想要利用单步调试来解决,但奈何只有 LeetCode Plus 会员才可以使用其网页的调试功能。好在绝大部分本地 IDE 都具备十分强大的调试功能,我们只需要将自己的解题代码复制到本地,并编写简单的测试程序即可。但是对于二叉树相关的题,测试数据的编写显得不那么容易,本文编写了一个匹配 LeetCode 题目中的二叉树定义的类,该类包含一些基本的静态函数,能够很方便地实现二叉树的构造和二叉树的遍历。

LeetCode 二叉树的序列表示方式

LeetCode 中针对二叉树的输入数据以一个层序遍历序列的形式给出。与通常我们所说的层序序列不同的是,该层序序列包含从根节点到最后一个非空结点之间的所有空结点,该空结点以 null 的标识符给出,以此保证根据此序列所构造二叉树的唯一性(单纯依靠常规的不含空结点的层序序列无法构造一棵唯一的二叉树)。以下是一个简单的例子:

@@ -231,7 +231,7 @@

TreeNode::orderTraversalWithNull(root); } -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2023/10/17/%E9%AB%98%E6%95%88%E7%9A%84LeetCode%E4%BA%8C%E5%8F%89%E6%A0%91%E6%9C%AC%E5%9C%B0IDE%E8%B0%83%E8%AF%95%E6%96%B9%E6%A1%88/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

从机器指令的角度看一些位级操作

C/C++ 中有时会遇到一些位级操作,通常是一些隐式的类型转换,它们往往很难凭借高级语言层面的直觉来理解或记忆。本文旨在分析这些操作对应的汇编代码,从机器指令的角度来理解这类操作。

+
加载中...

从机器指令的角度看一些位级操作

C/C++ 中有时会遇到一些位级操作,通常是一些隐式的类型转换,它们往往很难凭借高级语言层面的直觉来理解或记忆。本文旨在分析这些操作对应的汇编代码,从机器指令的角度来理解这类操作。

补码数转换为更长的无符号数

int main() {
@@ -207,7 +207,7 @@ 

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2024/01/06/%E4%BB%8E%E6%9C%BA%E5%99%A8%E6%8C%87%E4%BB%A4%E7%9A%84%E8%A7%92%E5%BA%A6%E7%9C%8B%E4%B8%80%E4%BA%9B%E4%BD%8D%E7%BA%A7%E6%93%8D%E4%BD%9C/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏

评论
avatar
Zheng Chaoqun
Write the code, change the world
Follow Me
最新文章
-
加载中...

动态前缀和数组:树状数组

前缀和的不足

前缀和是一种常见的算法思想,能够实现在常数时间复杂度下得到某个子区间内所有元素和。以一维数组 nums 为例,定义前缀和数组 preSum,preSum[i] 表示 nums 前 i 个元素的和,利用动态规划的思想,易得 preSum[i] = preSum[i - 1] + nums[i] 的递推关系,因此构造一个前缀和数组的时间复杂度为 O(n),而查询前 i 个元素的和只需查询 preSum[i] 的值,为常数时间。

+
加载中...

动态前缀和数组:树状数组

前缀和的不足

前缀和是一种常见的算法思想,能够实现在常数时间复杂度下得到某个子区间内所有元素和。以一维数组 nums 为例,定义前缀和数组 preSum,preSum[i] 表示 nums 前 i 个元素的和,利用动态规划的思想,易得 preSum[i] = preSum[i - 1] + nums[i] 的递推关系,因此构造一个前缀和数组的时间复杂度为 O(n),而查询前 i 个元素的和只需查询 preSum[i] 的值,为常数时间。

前缀和方法在数组元素不发生改变的情况下十分高效,但如果数组元素可能会发生改变,与朴素求和做法(不使用前缀和数组,而是直接遍历区间元素累计求和)相比,前缀和数组需要 O(n) 的时间来进行更新。这两种做法要么查询是 O(1)、更新是 O(n),要么查询是 O(n)、更新是 O(1),那有没有一种折衷的方案,使得查询和更新效率都不至于太低呢?本文将介绍的树状数组就符合这样的条件。

@@ -203,7 +203,7 @@

} }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2024/03/03/%E5%8A%A8%E6%80%81%E5%89%8D%E7%BC%80%E5%92%8C%E6%95%B0%E7%BB%84%EF%BC%9A%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

自用耳机盘点

最近几个月看了不少耳机相关的内容,初步了解了一些耳机的参数指标以及选购方案,同时也给自己使用的耳机进行了一波更新换代。本文就简单盘点一下自己之前用过的和现在正在使用的耳机,内容完全基于个人的使用体验。

+
加载中...

自用耳机盘点

最近几个月看了不少耳机相关的内容,初步了解了一些耳机的参数指标以及选购方案,同时也给自己使用的耳机进行了一波更新换代。本文就简单盘点一下自己之前用过的和现在正在使用的耳机,内容完全基于个人的使用体验。

已退役

赛睿 Arctis9x

@@ -187,7 +187,7 @@

红米的这副 TWS 还是 21 年的时候买的,但是个人使用的其实并不多。

耳机的质感还算比较出色,佩戴体验也很不错,比较牢固且舒适。声音表现放现在来看是比较糟糕的,整体的听感比较闷,即使切换到高音增强模式也没有太大改善,当然也可能与个人的听音喜好有关,总之对我而言,拿它来听音乐并不是一个好的选择。但毕竟是注重便携的 TWS,音质方面我也没有抱太高的期望,主要还是使用体验方面的问题。首先便是续航,我这副尽管使用并不频繁,但单次续航大概只有 3 ~ 4 个小时了,如果全程开启降噪或通透模式的话肯定会更低,加上充电仓后的总续航时间个人没有统计过,不过应该也不会太乐观。此外,不知道是什么原因,我总感觉在开启降噪模式后时不时会出现左右耳压不一致的情况,不知道是不是软件 bug,总之相当影响体验。最后就是耳机麦克风貌似只支持通话时调用,其他应用无法调用,因此诸如微信视频通话和录音等场合只能使用手机自带麦克风,原因不明。

虽说 airdots3pro 的使用体验放今天来看并不理想,但我目前并没有打算更换,毕竟我现在还是更习惯有线耳机即插即用、不用担心电量问题的省心感。

-

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2024/03/12/%E8%87%AA%E7%94%A8%E8%80%B3%E6%9C%BA%E7%9B%98%E7%82%B9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

高效的区间二叉搜索树:线段树

与树状数组类似,线段树也是一种用来维护区间信息的数据结构,可以在对数时间复杂度内实现更新和查询等操作。但相较于树状数组多用于前缀和查询不同,线段树的应用范围更为广泛,例如区间最值等问题,代价是需要消耗更多的存储空间。

+
加载中...

高效的区间二叉搜索树:线段树

与树状数组类似,线段树也是一种用来维护区间信息的数据结构,可以在对数时间复杂度内实现更新和查询等操作。但相较于树状数组多用于前缀和查询不同,线段树的应用范围更为广泛,例如区间最值等问题,代价是需要消耗更多的存储空间。

结构

对于一个长度为 7 的数组,根据该数组 nums 元素建立的线段树结构如下图所示。

@@ -223,7 +223,7 @@

} }; -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2024/03/18/%E9%AB%98%E6%95%88%E7%9A%84%E5%8C%BA%E9%97%B4%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%EF%BC%9A%E7%BA%BF%E6%AE%B5%E6%A0%91/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

OSTEP Projects:Unix Utilities

本文将介绍操作系统导论(Operating Systems: Three Easy Pieces)作者所开源的操作系统相关课程项目 的 Unix Utilities 部分,包含个人的代码实现和设计思路。

+
加载中...

OSTEP Projects:Unix Utilities

本文将介绍操作系统导论(Operating Systems: Three Easy Pieces)作者所开源的操作系统相关课程项目 的 Unix Utilities 部分,包含个人的代码实现和设计思路。

wcat

思路

要实现一个 wcat 命令,打印从文件中读取到的所有字符。

@@ -329,7 +329,7 @@

return 0; } -

文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2024/05/04/OSTEP%20Projects%EF%BC%9AUnix%20Utilities/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
+
加载中...

OSTEP Projects:Reverse

本文将介绍操作系统导论(Operating Systems: Three Easy Pieces)作者所开源的操作系统相关课程项目 的 Reverse 部分,包含个人的代码实现和设计思路。

+ + +

思路

题目的要求很简单:按行读取数据,读取完成后将所读取到的所有行反向输出(行间反向,行内不变)。但代码实现上却包含不少细节。

+

首先是核心问题:如何将读取到行反向输出?首先可以确定的一点是:在所有行读取完成之前,读取到的每一个行都需要进行保存。那么,利用什么数据结构进行保存呢?我们需要这个数据结构能够确定输入的不同行之间的前后相对关系,因此想到使用线性表。由于最终读取到的行数是不确定的,因此不能使用一个固定大小的数组,而应该使用可变长的线性表,如链表、动态数组。而又因为可变数组的扩容操作比较耗时,且我们并不需要对元素进行随机访问,只需要最后输出的时候进行顺序遍历,因此链表就成为了最佳选择。

+

反转的具体实现可以参考经典问题反转链表,设定一个前驱结点 pre 和当前结点 cur,每次读取到新的行,就动态申请存储该行数据的内存空间,并将 cur 指向这块内存空间,然后将 cur 的 next 域指向 pre,然后 pre 再指向 cur,以便进行下一行的操作。

+

根据 README 的说明,当输入文件和输出文件是同一个文件时,程序打印相关错误信息并退出。这里一个简单的想法是使用 strcmp(argv[1], argv[2]) 判断两个参数字符串是否相同,但文件路径的表示方式并不是唯一的,如 ./t1.txtt1.txt 字符串不同,但表示的却是同一个文件。一个正确的做法是使用 stat() 函数,用以获取文件的状态信息,并对比输入与输出文件的状态信息是否相同。

+

最后,输入输出部分代码的实现可以封装为一个函数,并引入参数 FILE*,其中标准输入(stdin)和标准输出(stdout)可以看作是一个抽象的文件,并使用 fprintf() 进行文件写入。

+

代码

#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+typedef struct LineNode {
+	char* line_buf;
+	struct LineNode* next;
+} line_node;
+
+// 判断两个路径是否表示同一个文件
+int is_same_file(const char* file1, const char* file2) {
+	struct stat sb1, sb2;
+	stat(file1, &sb1);
+	stat(file2, &sb2);
+	return sb1.st_dev == sb2.st_dev && sb1.st_ino == sb2.st_ino; // 设备ID和inode号均相同
+}
+
+// 从文件fp中读取行数据
+line_node* read_from_file(FILE* fp) {
+	size_t sz = 0;
+	line_node* cur = NULL; // 当前结点
+	line_node* pre = NULL; // 前置结点
+	while (1) {
+		cur = (line_node*)malloc(sizeof(line_node*));
+		if (cur == NULL) {
+			fprintf(stderr, "malloc failed\n");
+			exit(1);
+		}
+		if (getline(&(cur->line_buf), &sz, fp) == -1) { // 读到文件末尾,删去当前无效结点并结束循环
+			line_node* temp = cur;
+			cur = pre;
+			free(temp);
+			break;
+		}
+		cur->next = pre; // 链表反转
+		pre = cur;
+	}
+	return cur;
+}
+
+// 写入反转后的数据到文件fp
+void write_to_file(line_node* cur, FILE* fp) {
+	while (cur != NULL) {
+		fprintf(fp, "%s", cur->line_buf);
+		line_node* temp = cur;
+		cur = cur->next;
+		free(temp);
+	}
+}
+
+int main(int argc, char* argv[]) {
+	line_node* cur = NULL;
+	
+	if (argc == 1) {
+		cur = read_from_file(stdin);
+		write_to_file(cur, stdout);
+	}
+	else if (argc >= 2 && argc <= 3) {
+		FILE* fp = fopen(argv[1], "r");
+		if (fp == NULL) {
+			fprintf(stderr, "reverse: cannot open file '%s'\n", argv[1]);
+			exit(1);
+		}
+		cur = read_from_file(fp);
+		
+		if (argc == 2) {
+			write_to_file(cur, stdout);
+		}
+		else {
+			FILE* fp2 = fopen(argv[2], "w");
+			if (fp2 == NULL) {
+				fprintf(stderr, "reverse: cannot open file '%s'\n", argv[2]);
+				exit(1);
+			}
+			if (is_same_file(argv[1], argv[2])) {
+				fprintf(stderr, "reverse: input and output file must differ\n");
+				exit(1);
+			}
+			write_to_file(cur, fp2);
+			fclose(fp2);
+		}
+		fclose(fp);
+	}
+	else {
+		fprintf(stderr, "usage: reverse <input> <output>\n");
+		exit(1);
+	}
+	return 0;
+}
+ +
文章作者: Zheng Chaoqun
文章链接: http://lordaeronesz.github.io/2024/05/06/OSTEP%20Projects%EF%BC%9AReverse/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lordaeron_ESZ's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
\ No newline at end of file diff --git a/404.html b/404.html index 1ba3b295..0206ff17 100644 --- a/404.html +++ b/404.html @@ -63,7 +63,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2024-05-04 18:25:31' + postUpdate: '2024-05-06 19:52:42' }