自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ADASIS V2 协议-1

ADASIS V2详解

2024-06-07 18:19:25 1208

原创 STL vector详解

本文参考vector源码,主要介绍vector的设计思路,了解一些方法的实现原理,内存机制。通过两个构造函数就可以知道,构造_Vector_base 时需要指定空间配置器同时也可以指定size,如果指定了size就会开辟sizesizeof(_Tp)这么大的空间,_M_start 指针指向这块空间的首地址,_M_finish 和_M_start 指向同一块地址(因为目前虽然开辟了空间但是并没有向vector中存入数据)。

2024-04-29 17:50:49 762

原创 windows qt打包保姆级教学

添加完可执行文件和需要的库后点击右下角的Process就可以进行封装了,会将所需要的封装到navi_tool_boxed.exe(前面设置的Enter Output File Name)中,然后你在out目录下会看见一个navi_tool_boxed.exe这个可执行文件会比之前的navi_tool.exe大一些,因为它包含所需的库,直接将navi_tool_boxed.exe给其他计算机直接运行发现可以运行了。如果想在其他计算机上运行只需要将整个out目录都发送给那个计算机就可以正常运行了。

2024-04-03 17:38:22 326

原创 NDS.Live Registry Module (注册表模块)

NDS.Live是分布式生态系统,要求客户端(如路上的车辆)能够直接访问特定的服务端点。服务端点由网络节点表示。注册表是NDS.Live的网关。注册表接收、存储和分发有关服务节点的元数据的网络节点。在客户端连接到任何特定服务之前,注册表能提供一些信息。服务节点通过注册宣布其操作就绪情况,连接成本和优先级值。客户端使用注册表来发现能够为特定于应用程序的需求提供数据的网络服务节点。注册表还能够考虑客户机经济方面的问题,并在带宽受限的环境中优先考虑请求。注册表表示网络节点,根注册表可以将客户端指向其他注册表。

2024-01-30 15:19:34 744

原创 WSL deepin的开荒之路

windows11安装deepin直通车。

2024-01-17 14:16:44 400

原创 windows11安装wsl deepin

一般情况下子系统默认安装在系统盘下面,这样可能会影响系统导致系统盘空间被占用。可以通过在windows的PowerShell下执行下面命令修改打开子系统命令行的默认用户。可以选择在PowerShell(终端管理员,下面统称PowerShell)上执行命令。直接单击鼠标左键就可以打开子系统了,第一次打开需要设置用户名和密码。下面将子系统打包,在PowerShell中运行下面命令。注销当前子系统,在PowerShell中运行下面命令。在PowerShell中运行下面命令查看子系统信息。也可以通过窗口操作设置。

2024-01-17 14:01:53 572

原创 C++由自定义类默认生成函数与三五法则

三”是指拷贝构造、赋值运算、析构这三个函数,“五”是在前面三个的基础之上再加上移动构造、移动赋值运算函数。三五法则就是说明这些函数之间的关系。下面就通过法则内容了解下它们之间的关系。当自定义的类中存在指针成员时,有时候会在构造函数中去给这个指针new一块空间,然后在析构时候将这个指针释放掉。这时候就需要我们去自定义一个析构函数。如果满足1这种情况我们也应该考虑自定义拷贝构造和赋值运算函数,因为如果使用默认的拷贝构造和赋值运算函数采用的时浅拷贝,采用浅拷贝就有可能发生double free导致程序崩溃。

2024-01-15 16:58:19 854

原创 deepin安装protobuf(3.22前版本可以使用此方法安装)

deepin安装protobuf

2024-01-12 13:27:27 434

原创 cloc工具统计代码量

通过上面命令可以统计当前目录下的所有代码信息如下。更多详细参数可以通过cloc --help查看。Language列:文件类型。comment列:注释行数。files列:文件个数。blank列:空行数量。code列:代码总行数。

2023-10-10 14:12:10 448

原创 HTTPS单向认证与双向认证

由于这些区别的存在,我们可认为TLS是SSL的不兼容增强版。证书是CA的私钥进行加密的,CA的私钥我们认为是安全可信的,因此就算第三方截取到消息可以进行解密(使用CA的公钥),但是无法串改信息后加密(因为第三方没有CA的私钥),这就保证了客户端收到的信息一定是服务端发来的,然后对服务的发来的证书进行验证。2、证书认证机构(CA)确认无误后通过消息摘要算法(MD5,SHA) 加密申请的CA证书中的信息,加密完的就叫信息摘要,然后把信息摘要用CA的私钥(申请的RSA私钥) 进行加密,加密完的数据就是签名。

2023-08-25 16:44:08 2142

原创 windows/linux git安装

然后linux 使用命令行,windows使用git bash ,用git clone就可以下载远程仓库中的代码了。linux 使用命令行,windows在安装完git使用git bash运行下面命令配置邮箱和用户。将公钥复制拷贝到gitlab或者github这种远程的git仓库添加ssh-key的位置即可。linux 使用命令行,windows使用git bash运行下面命令生成ssh key。不建议使用官网下载,非常慢。建议使用镜像网站下载。

2023-07-27 16:58:56 107

原创 C++单元测试Gtest+Stub攻略

笔者环境为linux环境(deepin),以下均在此环境进行。

2023-05-25 16:05:07 2199 2

原创 干货记录分享

gtest,google测试框架,是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的。软件开发中涉及到一些设计文档架构文档等,可以使用Markdown编写,他可以引入plantuml画的图,同时vscode中插件支持。工作中遇到的一些实用的工具和一些学习网站记录下来,方便日后查找。Jenkins是一个开源软件项目,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。

2023-04-13 17:35:53 183

原创 C/C++通过shapelib开源库读取shapefile文件

C/C++通过shapelib开源库读取shapefile文件

2022-11-07 10:23:51 1485 2

原创 C语言位域

在之前工作中从未使用过这种形式,可能是一个公司一个编码风格吧,现在的公司里面大量代码定义时候都使用到了位域,作者在网上搜了一点资料看了一下,记录一下自己简单的理解。在信息存储时,有时我们很确切的知道某个值的范围,我们就可以使用位域来限制这个变量的取值范围,并且能节省内存。使用位域时的意思是该变量仅占用数值对应值的比特位个数。并且数值对应值不应大于变量类型所占的最大比特位数。比如一个在结构体中有个值a取值范围是0-15那么我们在定义变量类型的时候就可以使用位域,使用位域可以节省内存空间,bc等值同理,为了方

2022-07-08 17:17:33 389

原创 linux命令行使用repo

repo浅析

2022-06-13 10:47:27 5153

原创 大端字节序和小端字节序

大端字节序和小端字节序简介大端字节序(BigEndian也有称MSB)小端字节序(LittleEndian也有称LSB)大小端转换总结简介首先说明下为什么会出现大端和小端两种字节序,原因就是大端更适合人类的阅读习惯,而小端计算机CPU的读取效率更高。因此在计算机内部CPU运算时大多使用小端字节序,而在网络传输和文件存储时大多采用大端字节序。大端字节序(BigEndian也有称MSB)大端字节序就是低地址存储数据的高位,而高地址存储数据的低位:int num = 0x12345678;地址

2022-04-26 13:48:06 1680

原创 车载以太网some/ip浅析

车载以太网some/ip解析简介some/ip数据格式访问方式简介SOME/IP(Scalableservice-Oriented Middleware over IP)是车载以太网通信引入的一个概念位于OSI7层网络模型的第五层some/ip数据格式访问方式建立通讯需要Service和Client共同完成因此在进行通讯之前需要确认网络连接,这一过程称之为服务发现(Service Discovery)。通过SOME/IP服务发现(Service Discovery)可以定位服务实例、检查服务是

2022-04-14 16:45:06 482

原创 ADASIS V3浅析

ADASIS V3浅析ADASIS简介ADASIS V3应用意义ADASIS V3消息类型ADASIS简介随着汽车产业发展,自动驾驶的实现对高精度地图依赖越来越强烈,ADASIS(Advanced Driver Assistance Systems Interface Specification)翻译过来的意思就是高级驾驶员辅助系统接口规范。它主要负责的内容就是传输车辆前方相关的地图数据。ADASIS至今(2022年)已经发布了三个版本:版本描述ADASIS v12005 年发布

2022-04-14 16:37:22 5318

原创 linux 命令行使用svn

linux 命令行使用svn简介常用命令简介SVN是subversion的缩写,是一个集中式的开放源代码的版本控制系统,通过采用分支管理系统的高效管理。常用命令命令简写命令描述svn checkout <库路径>svn co <库路径>下载远程文件到本地svn updatesvn up更新版本svn add <文件名>无添加新文件svn commit -m “log_msg”svn ci -m <log_

2022-04-14 09:59:39 2034

原创 在C/C++程序中执行终端命令并获取输出

在C/C++程序中执行命令并获取输出在程序中执行终端命令并获取输出大概有两个思路:1.在执行命令时将输出重定向到文件中,然后去读取文件获取命令行的输出,这样做的好处就是可以保留命令行输出到文件中,可以只管的看到命令行输出的结果。2.可以通过popen函数直接获取执行命令的结果,这样做没有中间产物不用读写文件代码量少清晰,如果是常规的项目需要这么做防止中间产物泄露。下面直接上代码:1.使用system重定向到文件中去:#include <QApplication>#include &

2022-04-02 17:22:19 6851

原创 linux命令行使用git

git前言git简介git安装配置git工作流程git使用前言之前公司都是使用svn来存储代码,由于最近工作的变动,新公司采用git存储代码,之前虽有耳闻但未使用过。自己从零到可以正常使用也遇到了一些问题,通过网络查到了一些方式。现在整理一下方便小白使用。git简介git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。最初开发git是为了帮助管理Linux内核开发。Git本地有四个工作区域分别是工作目录(Working Directory)、暂存区(Stage/I

2022-03-24 17:55:29 3016 1

原创 C/C++预处理器,宏定义,宏函数浅析

C预处理器浅析C预处理器简介指令规则预编译指令预定义宏预处理器运算符宏定义注意事项C预处理器简介预处理器不是编译器的组成部分,他是编一过程中的一步,发生在编译之前。我们把C预处理器(C Preprocessor)简称为CPP。预处理的作用就是在代码被编译前对代码做某些替换。指令规则预处理指令的写法都是以#开头,#必须是该行第一个非空白字符,#和关键字之间允许存在任意个数的空白字符,接着是指令所需要的其他信息,整行够成了一条预处理指令。预处理指令总是在第一个换行符结束,除非明确的指明指令要继续。

2021-11-10 14:51:29 630

原创 linux crontab定时任务

一、关于crontabcron是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。在Ubuntu中,cron是被默认安装并启动的。在命令行直接输入 crontab -e 即可编译当前用户的定时任务二、解释**1、crontab定时任务语法如下:**minute hour day month week command #顺序:分 时 日 月 周 ...

2021-11-03 13:41:37 116

原创 shell脚本的几种常见执行方式,及其区别

**shell脚本常用的执行方式:**1.[ bash(也可换成其他命令解释器如sh等) scipt-name ]:这是当脚本文件本身没有可执行权限(即文件属性x位为-)时常使用的方法,或者当文件开口没有指定命令解释器也可使用这种方法来决定用哪个命令解释器来执行。这种执行shell的方法是比较推荐的,因为他可以在文件没有执行权限的情况下使用,也可以指定命令解释器。2.[ path/scr...

2021-11-03 13:34:14 1268

原创 C++ STL vector遍历方式及其效率分析

C++ STL vector遍历方式及其效率分析++i和i++区别下标遍历迭代器遍历for_each遍历总结++i和i++区别++i使用的是i执行完+1后的值可以直接使用,而i++是先使用i然后在对i进行+1这样就需要一个临时变量去进行转储,虽然只是一个简单的操作但是在循环中这一操作就会被循环次数而放大。如果i是一个简单的int型变量在很多编译器里面会优化这种写法,但是如果i是一个迭代器那么循环的性能就会收到影响,具体大小受到循环次数的约束。笔者亲测在QT中部分源码以及输出如下: std::vec

2021-10-19 13:42:13 2944 4

原创 C++ operator关键字浅析

C++ operator关键字的两个重要作用1.重载操作符2.操作隐式转换提到operator就不得不提到操作符(+=,=,==,<<,<…),我理解操作符本身就是函数实现的,由于日常使用operator关键字大多都是重载操作符,导致我们忽略了他的另一个重要作用–操作隐式转换。1.重载操作符在日常编码中operator关键字最常见的使用方式就是用它来重载操作符下面直接上例子:class persion{public: int age; bool sex;

2021-10-15 10:53:19 681

原创 Linux C/C++面试题汇总

Linux C/C++面试题汇总前言计算机基础程序的内存空间进程和线程相关关键字conststaticvolatileC/C++指针前言最近面试的比较多,看了很多关于面试的内容,有些平时工作用的比较少或者没有主要到的地方,长时间不看就会忘记,如果下次面试还需要再次找这些东西比较麻烦,所以写此篇文章就是为了方便以后面试,也给一些即将面试的人提供一些帮助。以后如果面试有新的值得关注的问题作者会及时更新。计算机基础程序的内存空间堆栈段(stack):由编译器自动分配和释放,存放函数的参数和局部变量。

2021-08-01 11:21:20 3656

原创 C++智能指针

C++智能指针全面解析前言auto_ptrunique_ptrscoped_ptrscoped_arrayshared_ptrshared_arrayweak_ptrintrusive_ptr前言C++中没有像Java一样提供自动回收机制,程序员想要操作堆内存只能使用指针通过new或者malloc开辟,delete或者free释放。在日常工作中经常出现程序员没有准确的释放内存,有可能导致内存泄露,或者调用了一块已经被释放的内存而出现种种问题。智能指针的出现有效的解决了这类问题。目前为止作者了解到的C+

2021-07-20 17:28:43 177

原创 C++类的成员函数做回调函数

C++类的成员函数做回调函数回调函数原理:通过函数指针的传递,使被注册的一方可以通过函数指针找到函数地址,从而实现调用注册进来的函数。C++成员函数和普通C函数的区别:C++成员函数隐藏传递一个函数参数(this指针),C++通过传递指向自己的this指针可以使成员函数访问自己的成员变量和成员函数。成员函数作为回调函数在注册毁掉函数时,由于隐藏参数this指针就会因为类型不匹配从而导致回调函数注册失败。在网上查询了一些资料可以通过以下几种方法实现成员函数作为回调函数:定义一个普通函数或友元函

2021-06-22 09:19:32 1002

原创 C++虚函数浅析

C++虚函数全面解析虚函数的工作原理:虚析构函数:C++中的静态联编和动态联编学习过C++的都知道可以通过虚函数实现多态。在基类中定义一个虚函数,在派生类中可以重写这个虚函数,实现派生类自己的特性。虚函数的工作原理:C++规定了函数名参数返回值,没有规定实现,可以根据需要自行实现内容。通常编译器处理虚函数的方法是给每个对象添加一个隐藏成员。该成员保存了一个指向函数地址的数组指针,这个数组指针也就是虚函数表。虚函数表中保存了对象中所有虚函数的地址(包括继承的基类的虚函数地址),如果派生类多重继承就会存在

2021-06-03 13:28:40 1863 3

原创 整数0强转成指针类型的巧妙操作

整数0强转成指针类型的巧妙操作在C语言中指针是一个整数相当于地址编号,如果给一个整数a强转成指针可以理解为该指针地址编号为a。下面就介绍下该方法应用在结构体中的巧妙之处。typedef struct{ int a; char b;}Msg;如上所示结构体Msg,如果将一个整数0强转成Msg可以理解为,Msg所在的首地址为0,那么((Msg *)0)->b,就可以理解为取结构体成员b的内容,但是我们自己知道其实0这个首地址并没有存储结构体Msg的信息,取内容也就毫无意义,所以我们不要取内容

2021-06-02 21:11:12 1961

原创 C语言结构体,共用体占用内存原理解析

C语言结构体占用内存原理解析结构体内存原理解析:共用体内存原理解析:结构体内存原理解析:结构体在内存中的存储有以下规则:结构体成员中的其实地址应该是该成员所占内存的整数倍,如果不足整数倍需要补齐结构体所占内存为结构体成员中最大基础数据类型的整数倍。这里说下基础类型:int,char,long,long long,double,float规则1解析:typedef struct{ char a; int b;}Msg;结构体Msg在内存中的存储方式如下图所示:a占用了第

2021-06-02 13:51:06 4042 6

原创 char data[0]在结构体末尾的巧妙用法

char data[0]在结构体末尾的巧妙用法在公司的项目代码中看见一个有趣的结构体如下:typedef struct{int Head;char data[0];}Msg;当时看到也是一脸雾水,后来在网上查找资料,发现了这一用法的奇妙之处。这一用法有如下好处:在结构体中但是并不占用内存。巧妙地将消息头和消息体连接在一起,并且可以直接取到消息体的首地址。这种用法一般都在消息传输时候定义消息头,里面包含后面消息体的长度,在接收完消息后可以按照解析完的消息头中的信息(比如消息长度、类

2021-06-02 12:46:33 690

原创 C++public、protected和private的区别

C++public继承、protected继承和private继承的区别学习C++这三个关键字是比较基础且常见的,下面先简单介绍下这三个关键字在类内的作用:public:公有的,说明声明在public后面的成员所有人都是可以使用的。protected:受保护的,类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问private:私有的,只有类内的成员函数才可以访问。

2021-06-02 11:07:16 7194

原创 Effective C++边读边记主要内容梳理持续更新中...

Effective C++第一章让自己习惯C++条款01:视C++为一个语言联邦条款02:尽量以const,enum,inline替换#define条款03:尽可能使用const第二章构造/析构/赋值运算第一章让自己习惯C++条款01:视C++为一个语言联邦这里主要将C++分成四个部分,每个部分都有各自的规则可能不同1.C语言部分2.Object-Oriented C++部分3.Template C++部分4.STL部分条款02:尽量以const,enum,inline替换#define1

2021-05-27 15:36:03 480 1

原创 C++ explicit关键字

explicit用来防止由构造函数定义的隐式转换。直接上代码,比较简单。// An highlighted blockclass name{public: explicit name(int a) { qDebug("1111111"); } name(char a) { qDebug("222222"); } explicit name(const name &t){ qDebug("33333333"

2021-05-27 11:16:04 99

原创 C/C++编译过程

一个C/C++文件编译一般要经过,预处理,编译,汇编,和链接才能变成一个可执行文件预处理过程代码在编译前需要先扫描代码对其中的头文件,宏等进行初步替换,删除注释等操作,该过程不会做任何的语法检查,生成新的源代码提供给编译器,这个过程就是预处理过程。该过程是由预处理器来完成的。该过程将.c/cpp文件生成.i文件。.i文件是可以直接查看的。gcc -E -o hello.i hello.c编译过程预处理生成新的源代码后就可以进入编译过程,该过程会将C/C++语言翻译得到得到汇编语言代码。该过程会进行

2021-05-27 10:28:57 215

原创 Dijkstra算法(迪杰斯特拉算法)

Dijkstra算法(迪杰斯特拉算法)本文主要介绍Dijkstra算法(迪杰斯特拉算法)的思想没有源码实现,但写出了思路流程。当你了解这个算法思想后会很容易写出源码。Dijkstra算法(迪杰斯特拉算法)是比较常用的最短路径算法,可以算是贪心思想的实现。贪心思想是在对问题求解时,总是做出在当前看来是最好的选择。Dijkstra算法核心就是求出局部最优解。下面用open,close表描述Dijkstra算法的过程。首先介绍下open表和close表,open表用于存储未探索的节点,也可以理解为这次探索到

2021-05-20 14:06:02 2502

原创 广度优先算法

广度优先算法本文主要以介绍算法思想为主这里并没有进行源码实现,但是给出推荐使用的数据结构和主要思想。首先介绍一下广度优先算法,假设要查找AB两点之间的最短距离,以A为起点B为终点。可以先遍历A的相邻节点,这些节点称之为一度关系,当一度关系里没有时,就遍历一度关系的相邻节点,遍历到的这些节点可以称之为二度关系,以此类推直到遍历到B点则该遍历路径就为最短路径。广度优先算法实现:广度优先算法需要用到队列先进先出的特性,首先将首节点放入队列中,然后进入循环体1234循环:1.每次从队列中弹出最先放入的节点

2021-05-20 11:30:24 8217

空空如也

空空如也

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

TA关注的人

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