自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 问答 (2)
  • 收藏
  • 关注

原创 Ubuntu20.04正确的开启方式(美化+软件安装)

这里写自定义目录标题1.什么都没有的ubuntu20.04第一步 系统设置新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入1.什么都没有的ubuntu20.04这是一台什么都没有的ubuntu20.04 ,连ifconf

2021-08-11 23:06:19 7121 2

原创 ubuntu20.04安装微信和QQ,腾讯会议,以及一些其他实用软件

最近沉迷于ubunut20.04,以及它的美化,美化的差不多了,之后,就差安装微信和qq了,微信对于我来说是必要的,qq有时候也需要使用,所以索性就安装上了。但在这个过程中,出现了很多问题。安装这两个软件,网上有很多教程,但有用的很少,或许是教程很久远了,很多网址里的安装包就不是不存在的。废话不多说,开始吧!安装必要的工具及deepin-wine依赖sudo apt install wget g++ git安装deepin-winegit clone "https://gitee.com/wsz

2021-01-12 14:02:04 39921 80

原创 组合模式(Composite Pattern)C++

这体现了组合模式的强大之处:客户代码可以以统一的方式处理单个对象和组合对象,从而简化了客户代码的复杂度。我们希望设计一个系统,允许角色装备单个物品或物品的组合,同时能够统一处理这些物品或物品组合。组合模式使得客户端通过一个统一的接口操作单个对象和组合对象,这简化了客户端的使用,同时支持树形结构的复杂性管理。在游戏开发中,组合模式可以用于表示游戏中的菜单系统、UI组件层次、游戏角色的装备系统等,其中每个部分既可以是一个单一对象,也可以是一个由多个对象组成的复合对象。Composite(组合组件)

2024-02-28 15:03:30 791

原创 装饰器模式 (Decorator Pattern) C++

肯定的是你可以通过这种方式实现,否定的是你不要用这种方式实现,因为通过这种方式你就只能为这个特定的 ConcreteComponent 提供修饰操作了,当有了一个新的ConcreteComponent 你 又要去新建一个Decorator 来 实 现。这种模式创建了一个装饰器类,用来包装原有类的实例,从而在保持原类方法调用方式不变的情况下,为对象添加新的功能。实现具体的装饰器类,这些类通过调用Character的display方法,在执行自己的装饰功能前后,能够添加额外的行为。然后,实现一个具体的角色类。

2024-02-28 13:25:02 809

原创 桥接模式(Bridge Pattern) C++

在游戏开发中,桥接模式可以用于分离游戏的图形渲染引擎(实现化角色)和游戏中的对象(抽象化角色),以便独立地管理和扩展它们。Bridge 模式的结构图中可以看到,系统被分为两个相对独立的部分,左边是抽象部分,右边是实现部分,这两个部分可以互相独立地进行修改。定义游戏中的抽象对象GameObject,它持有一个对渲染引擎的引用,以便于对象可以使用不同的渲染引擎进行渲染。现在,如果想要在游戏中使用不同的渲染引擎来渲染对象,只需要在创建游戏对象时传入不同的渲染引擎实例即可。实现化角色:渲染引擎接口。

2024-02-26 16:47:28 884

原创 适配器模式(Adapter Pattern) C++

适配器模式让那些接口不兼容的类可以一起工作,它通过包装一个已有的类提供一个新的接口,从而使原本由于接口不兼容而不能一起工作的类可以一起工作。在这个对象适配器中,AlienObjectAdapter持有一个指向NewEnemy接口(即Alien类实例)的指针,并通过这个引用来调用具体的方法,将NewEnemy接口的方法适配到OldEnemy接口期望的方法上。对象适配器使用组合,包含一个被适配者的引用,这表示适配器和被适配者之间是“有一个”(has-a)的关系。类适配器可以重写被适配者的行为。

2024-02-26 09:24:44 1077

原创 原型模式(Prototype Pattern) C++

上一节:建造者模式(Builder Pattern)C++原型模式(Prototype Pattern)是一种创建型设计模式,其思想是基于一个原型实例创建对象的副本,从而避免新实例创建时的标准方式(如使用new关键字)。在需要创建的对象与原有对象类似或者创建过程较为复杂时,使用原型模式可以更高效地复制对象。假设我们正在开发一个游戏,其中包含大量的怪物。这些怪物分为几种类型,比如“地精”、“龙”等。每种怪物都有自己的属性(如生命值、攻击力等),但同种类型的怪物在初始状态下这些属性是相同的。在游戏中,我们需要

2024-02-23 10:32:18 843

原创 建造者模式(Builder Pattern)C++

通过使用不同的建造者,我们可以构建具有不同属性的游戏角色,而无需直接操作复杂的构建过程。建造者模式将对象的构建过程和表示分离,使得我们可以更灵活地构建不同的对象,并且可以随时增加新的建造者类来扩展构建过程。通过以上示例,你可以看到建造者模式的应用。接下来,创建一个抽象建造者类CharacterBuilder,定义构建游戏角色的各个部分的方法,并声明一个返回最终产品的方法。最后,创建指导者类CharacterDirector,负责协调建造者的构建过程,按照特定顺序调用建造者的方法来构建游戏角色。

2023-06-05 17:03:41 537

原创 模板方法模式(Template Method Pattern) C++

模板方法模式(Template Method Pattern)是一种行为设计模式,用于定义一个算法的骨架,将一些步骤的实现延迟到子类中。在模板方法模式中,一个抽象类定义了一个模板方法,该方法包含了算法的主要步骤,而具体的实现则由子类来完成。算法的骨架由抽象类定义,而具体的实现可以在具体类中灵活地实现和修改,从而提高代码的复用性和可维护性。这就是模板方法模式的基本思想:将算法的骨架定义在抽象类中,而将具体的实现留给子类来完成。这样可以保持算法的一致性,同时又能够灵活地扩展和定制算法的具体实现。

2023-05-31 09:25:18 520

原创 工厂模式(Factory Pattern) C++

假设我们正在开发一个游戏,其中有不同的种族(Race),每个种族都有不同类型的兵种(Unit)和建筑(Building)。// 兵种基类 class Unit {public :// 其他共有方法和属性 };// 建筑基类 class Building {public :// 其他共有方法和属性 };// 人族兵种类public:cout

2023-05-30 14:10:47 729

原创 单例模式(Singleton Pattern) C++

设计模式,听起来有点高大上,但实际上它是软件开发中的一套经验总结和指导原则。学习设计模式是我们成为更好的程序员的关键一步,不管你是新手还是老手,它都能带来巨大的益处。为什么要学习设计模式?嗯,学习设计模式有好几个原因,我给你简单说说:首先,它可以提升你的代码质量和可维护性。设计模式是经过验证的解决方案,可以帮助你写出更好的代码。它们消除了重复和冗余的代码,使你的代码更灵活、更易于扩展和维护。其次,学习设计模式有助于团队合作和沟通。

2023-05-25 10:17:14 876

原创 读写锁 互斥锁 乐观锁 悲观锁 自旋锁

因此,在访问共享资源之前,线程会先获取锁,并确保其他线程无法访问该资源。读写锁(Reader-WriterLock):读写锁是一种特殊的锁,它允许多个线程同时读取共享资源,但只有一个线程可以写入共享资源。自旋锁(Spin Lock):自旋锁是一种特殊的锁,它不会让线程阻塞,而是让线程忙等待锁的释放。但是,写操作必须互斥进行,因此在写操作比较频繁的情况下,读写锁的性能会比互斥锁差。在这些场景中,多个线程需要访问同一变量,但是操作非常简单,不需要使用复杂的锁机制,原子变量可以提供一种高效的解决方案。

2023-03-27 11:06:23 645

原创 委派构造函数

而通过成员的初始化委派构造函数,以及继承构造函数,C++ 中的构造函数的书写将进一步简化,这对程序员尤其是库的编写者来说,无疑是有积极意义的。可以看到,在代码清单3-11中,我们在Info(int) 和Info(char)的初始化列表的位置,调用了“基准版本"的构造函数Info()。在委托构造的链状关系中,而在构造函数比较多的时候,我们可能会拥有不止一个委派构造函数,而一些目标构造函数很可能也是委派构造函数,这样一来,我们就可能在委派构造函数中形成链状的委派构造关系,如代码清单 3-13 所示,

2022-11-19 10:30:26 384

原创 继承构造函数

另外我们还需要了解的一些规则是,如果基类的构造函数被声明为私有成员函数,或者派生类是从基类中虚继承的,那么就不能够在派生类中声明继承构造函数。多个基类中的部分构造函数可能导致派生类中的继承构造函数的函数名、参数(有的时候,我们也称其为函数签名)都相同,那么继承类中的冲突的继承构造函数将导致不合法的派生类代码,如代码清单3-7所示。可以看到,在代码清单3-6中,我们的基类的构造函数A(inta=3,double=2.4)有一个接受两个参数的构造函数,且两个参数均有默认值。变量b的定义应该是不能够通过编译的,

2022-11-05 10:47:07 1359

原创 linxu下c/c++遍历文件夹获取文件

最近工作需要,需要遍历文件夹下的文件,但是我发现遇到两个非常有意思的问题,记录一下。测试的平台为Tina linxu 和PC linux的运行结果不同,直接点,,说了跟没说一样上述代码是三种不同的方式实现遍历文件夹,但是都大同小异,下面是在pc linxu 的执行结果,其中test_image是测试文件路径,其中有多重子目录,很明显结果没什么问题,但是当我移到Tina linux上时,结果如下结果相差甚远。

2022-10-27 15:20:04 1735

原创 friend友元

而在需要进行测试的时候,我们使用Validator为模板参数,实例化出DefenderTest及AttackerTest版本的类,这个版本的特点是,Validator是它们的友元,可以任意访问任何成员函数。值得注意的是,在代码清单2-22中,我们使用了using来定义类型的别名,这跟使用typedef的定义类型的别名是完全一样的。这里,按照封装的思想,所有成员变量被声明为private的。在c++11之前,声明一个类和另外一个类的友元时,是需要使用class关键字的,但在c++11中是不需要的。

2022-10-20 11:58:00 146

原创 c++模板

+。很多时候,由于程序员低估了模板实例化展开的开销,因此大量的模板使用会在代码中产生大量的余。这种余,有的时候已经使得编译器和链接器力不从心。++

2022-10-20 11:31:04 747

原创 final/override 控制

Printable则是继承了基类,并只实现了Print,然后Add2和Mul3又继承了Printable,但是在Add2和Mul3中也是可以重写Print的,但是如果Printable和Add2是两个不同的人员编写,这个时候如果Add2的编写者重写了Print吗,那么Printable编写者期望的打印风格将会改变,所以这个时候final就能派上用场,在函数后面加上该关键字就可以禁止该函数的重写。但出于安全考虑,建议读者在C++11代码中应该尽可能地避免这样的变量名称或将其定义在宏中,以防发生不必要的错误。

2022-10-20 11:28:36 236

原创 就地初始化与列表初始化

C++11 支持了就地初始化非静态数据成员的同时,初始化列表的方式也被保留下来,也就是说既可以使用就地初始化,也可以使用初始化列表来完成数据成员的初始化工作。当二者同时使用时并不冲突,初始化列表发生在就地初始化之后,即最终的初始化结果以初始化列表为准。从C++11开始,对列表初始化(List Initialization)的功能进行了扩充,可以作用于任何类型对象的初始化,至此,列表初始化方式完成了天下大一统。可以将 C++11 的列表初始化作为统一的初始化方式,既降低了记忆难度,也提高的代码的统一度。

2022-10-20 11:10:30 382 1

原创 noexcept 修饰符

1.当noexcept是标识符时, 它的作用是在函数后面声明一个函数是否会抛出异常.2.当noexcept是函数时, 它的作用是检查一个函数是否会抛出异常.

2022-10-20 11:07:43 530

原创 assert 断言

由于extern"C"可以抑制C++对函数名、变量名等符号(symbol)进行名称重整(namemangling) ,因此编译出的C目标文件和C++目标文件中的变量、函数名称等符号都是相同的(否则不相同),链接器可以可靠地对两种类型的目标文件进行链接。结果如我们预期的,在模板实例化时我们会得到编译器的错误报告,在我们的实验机上会输出比较长的错误信息,主要信息是除零错误。有的时候,我们希望在编译时能做一些断言。表达式的结果必须是在编译期间可以计算的表达式,也就是说是常量表达式,如果使用了变量,则会导致错误。

2022-10-20 10:04:21 283

原创 C++11 学习之路

最近开始学习c++ 11,那就从读书开始吧.

2022-10-20 09:59:08 101 2

原创 CRT 字体颜色设置不生效

crt 字体颜色设置不生效

2022-07-04 21:19:09 1707 2

原创 git把分支变成master

以下操作在确定不再使用master代码才进行,或者备份一份原master假设需要变成主分支的分支名称为 branch11.到git的setting页面,把默认分支暂时替换为其他分支,如 branch1,一般在仓库管理中的分支管理里可以设置2.在本地切换到其他分支,不能在master git checkout branch13.删除本地及远程master分支git branch -D master //删除本地master分支git push origin --delete master

2021-12-17 15:41:25 3156

原创 amr文件转换

因为工作需要需要把amr文件转换成mp3格式的文件,但是网上的一些转换器或者在线转换都是些什么牛马,没点用,浪费了一个上午时间。//环境sudo apt-get install ffmpegsudo apt-get install gcc以下命令中的是一个开源转换工具,可以直接使用//获取开源工具git clone https://github.com/kn007/silk-v3-decoder.git然后就可以使用 了test.amr 为需要转换的文件 ,MP3为转换后的格式sh c

2021-09-12 11:25:13 400

原创 git保存登录凭证

1.执行如下命令,然后只需输入一次凭证即可git config --global credential.helper store

2021-09-11 10:06:18 1436

原创 c语言和golang实现万年历

思路:year:=2021,month:=9求出2021年8月31日,距离1900年1月1日的总天数,除以7取余数,就是空格的数量万年历是连着的,一行有七个,所以7的余数就是当月一号所在的列数 -1 ,所在列数就是(余数 +1)...

2021-09-09 22:27:26 381

转载 gnutls_handshake() failed: The TLS connection was non-properly terminated.

https://blog.csdn.net/shaopeng568/article/details/114919318git config --global --unset https.https://github.com.proxy git config --global --unset http.https://github.com.proxy

2021-09-04 10:05:50 480

原创 git 错误:GnuTLS recv error (-54): Error in the pull function

最近在使用git时经常出现这个问题,google后说问题出现在一般libssh上,记录一下我是直接使用这个命令就解决了这个问题: sudo apt-get -y install build-essential nghttp2 libnghttp2-dev libssl-dev

2021-08-21 11:06:28 7999 6

原创 github使用token并设置自动验证

前言在三天前,在使用github的时候,发现无法再使用账号密码进行验证了,所以配置使用token来进行验证,本文记录配置过程。1.获取token我们需要创建我们自己的token,打开自己的github,然后右上角,点击自己的头像,再点Settings->Developer settings然后就会看到如下界面,点击创建即可,至于权限如何选择,看自己吧,如果觉得麻烦就全选,但不建议,如果不知道每个权限选项的意思,可以用google浏览器自带的翻译,即可查看,创建好之后,就会存在一个token

2021-08-16 23:09:34 2712 1

原创 ubuntu-server16.04的安装和设置

1 首先安装ubuntu-server1.下载1604的server版2.安装VMware Worksation;3.选择1604的iso,即 ubuntu-16.04.6-server-i386.iso 装载然后安装即可;4.简易安装直接点击完成,系统会自动进行安装;5.设置共享文件夹,用于拷贝windows目录,共享到ubuntu,点击获取参考信息。//解决重启后无法使用共享文件夹问题,这一步可以等到安装好和openssh后再操作sudo vi /etc/rc.local//添加这个

2021-08-14 11:04:39 1860

原创 实现简易的log日志系统

日志的级别一般分五级:ERROR(错误):此信息输出后,主体系统核心模块不能正常工作,需要修复才能正常工作。WARN(警告):此信息输出后,系统一般模块存在问题,不影响系统运行。INFO(通知):此信息输出后,主要是记录系统运行状态等关联信息。DEBUG(调试):最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以在这里输出。TRACE(跟踪):最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以在这里输出。在本文实现的简单日志系统中简单的把日志输出到屏幕和文件,屏幕上

2021-08-09 16:45:23 485

原创 linux内核编译一些经验

编译linux内核在我看来有两种情况:一种只是单纯的编译linux内核,用来更换自己系统内核,不存在有关硬驱动开发。第二种就是编译开发板所需的内核,在编译驱动程序或者一些有关硬件的程序是需要使用内核树的。第一种情况下,需要注意的问题应该不是很多,简单说一下过程。1.首先下载内核源码,这是下载地址:linux内核个版本我下载的版本是3.4.39,所以以该版本为例。文件为 linux-3.4.39.tar.bz2目前我使用的系统是ubuntu20.04,一开始我打算使用该版本来编译内核,但是发现根本成

2021-04-19 11:11:00 236

原创 ubuntu20.04蚂蚁笔记(leanote)的使用

目录:1.前言2.安装及使用2.1安装 mongodb 数据库2.2 下载 leanote 二进制版2.3 导入初始数据2.4 配置leanote3 使用 leanote1.前言最近在一台新电脑上安装了ubunut20.04,非双系统,只有一个系统,所以软件必须得齐,蚂蚁笔记是其中之一。2.安装及使用2.1安装 mongodb 数据库sudo apt-get install mongodb安装完成后,可以测试一下mongo 这样算是安装完成的,quit()退出2.2 下载 lean

2021-02-22 13:26:05 2238 4

原创 keil5 中的wraing:no previous prototype SystemInit

这虽然是一个警告,但是下载程序到板子上,会得不到想要的现象,所以是需要解决的,6改成5即可

2021-01-25 19:16:46 1953 6

原创 ubuntu20.04设置登录壁纸

1.下载脚本wget -qO - https://github.com/PRATAP-KUMAR/focalgdm3/archive/master.tar.gz | tar zx --strip-components=1 focalgdm3-master/focalgdm32.设置壁纸,一步一步来就行sudo ./focalgdm3 --set这一步中其中有一步是输入路径,如上图所示3.还原sudo ./focalgdm3 --reset...

2021-01-23 22:13:32 2813 6

原创 select/poll/epoll

什么是多路I/O转接技术?多路IO转接的字面意思:原本使用socket套接字编程时,是服务器(应用程序)一直在阻塞等待客户端的连接,这样服务器端(应用程序)的压力太大。于是服务器请来了助手,即select、poll、epoll等,这几个函数借助内核来替服务器监视有无客户端的连接请求,当有客户端的连接请求时,再经select、poll、epoll等助手转接给服务器端处理,这样可以有效减轻服务器的压力。

2020-09-23 00:00:43 226

原创 TCP基础之三次握手

TCP协议规定的传输格式如下图所示这就是三次握手,交流三次,刚看的时候反正一脸懵逼,什么SYN,什么ACK,不了解,也不理解。SYN和ACK都是标志位标志位:SYN:请求建立连接,及tcp传输格式中的32位序列ACK:应答,及tcp传输格式中的32位确认序列三次握手:第一次握手:服务器一般是 被动等待应答,等待客户端的请求,所以第一次握手是客户端发起的客户端:客户端发送SYN(确认请求连接),SYN的值由系统随机生成,可携带数据。不过不管有没有数据,个人认为都可以当成系统随机生成**

2020-09-15 21:05:02 389

原创 c实现图书借阅系统

功能较为全面,但没有归还子系统。代码里有详细注释源码里有两个txt文件,一个存放管理员信息,一个存放书籍信息图书借阅系统:https://github.com/qingyiz/library

2020-09-14 22:04:42 347

原创 学习笔记----linux下scoket

目录:1.预备知识1.TCP/IP协议2.Scoket概念3.网络字节序4.IP地址转换函数5.sockaddr数据结构1.struct sockaddr2.struct sockaddr_in3.struct in_addr4.struct sockaddr_in65.struct in6_addr6.struct sockaddr_un2.网络套接字函数1.socket() 函数2.bind() 函数1.预备知识1.TCP/IP协议TCP/IP网络协议栈分为应用层(Application)、传输层

2020-09-14 21:45:54 107

空空如也

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

TA关注的人

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