自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (2)
  • 收藏
  • 关注

转载 HTTPS工作原理

参考:写一篇最好懂的HTTPS讲解1. 对称加密与非对称加密对称加密:对称加密比较简单,就是客户端与服务器共用同一个密钥,该密钥可以用于加密一段内容,同时也可以用于解密这段内容。对称加密的优点是加密解密效率高,但是在安全性方面可能存在一些问题,因为密钥存放在客户端有被窃取的风险。对称加密的代表算法有:AES、DES等。非对称加密:非对称加密将密钥分成了两种:公钥和私钥。公钥通常存放在客户端,私钥通常存放在服务器。使用公钥加密的数据只有使用私钥才能解密,反过来使用私钥加密的数据也只有使用公钥才能解密。非

2021-08-20 21:47:56 920

原创 判断二叉搜索树BST是否有效的两种方法

目录方法一:自顶向下递归方法二:利用BST中序遍历为升序序列的性质判断方法一:自顶向下递归由于BST是递归定义的,在判断某一节点是否符合BST性质的时候,不能只判断其左右子节点与该节点间的大小关系,如果这样判断的话,对于下图所示情况将给出错误的判断:取而代之的是,我们应该判断对于任意节点,其是否在其应在的区间内。举例来说,对于上图中根节点5,由于是根节点,无区间要求;递归其左子树3,根据BST性质,3应该小于其根节点5,即其上边界为5,无下边界;递归3的左子树2,其上边界为3,无下边界;由于2的左右

2021-08-17 17:14:20 1275

原创 类内sort自定义排序函数需定义为static否则报错

目录1. 使用sort算法自定义排序的几种方法及类内实现出现的问题2. sort部分源码:1. 使用sort算法自定义排序的几种方法及类内实现出现的问题sort算法默认使用元素类型的 ‘<’ 运算符,但是当我们希望的排序顺序与 ‘<’ 所定义的顺序不同,或者我们的序列是未定义 ‘<’ 运算符的元素类型,这两种情况下,都需要重载sort的默认行为。通常,我们通过自定义一个cmp函数(官方称为谓词)作为sort的第三个参数来指定我们指定的排序规则,举例如下:输入:给定一个二维数组env

2021-08-16 20:56:23 1898 2

原创 C程序函数调用机制详解,看完必会!

C程序调用机制1. 栈帧结构和控制转移权方式2. 函数调用举例参考文献:函数调用操作包括从一块代码到另一块代码之间的双向数据传递和执行控制转移。数据传递是通过函数参数和返回值来进行。另外,我们还需要在进入函数时为函数的局部变量分配存储空间,并在退出函数时收回这部分空间。Intel 80x86 CPU为控制传递提供了简单的指令,而数据的传递和局部变量存储空间的分配与回收则通过栈操作来实现。1. 栈帧结构和控制转移权方式大多数CPU上的程序实现使用栈来支持函数调用操作。栈被用来传递函数参数、存储返回信息、

2021-08-08 18:44:18 1353

原创 Linux C 存储空间布局

目录1 .text段(代码段)2 .data段(初始化数据段)3 .bss段(未初始化数据段)4 栈(stack)5 堆(heap)注:注.1 静态存储区注.2 所有字符串常量均存储在静态存储区1 .text段(代码段)用来存放程序执行代码的一块内存区域,是由CPU执行的机器指令部分,通常是可共享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell等)在存储器中也只需要有一个副本。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。

2021-07-16 14:01:29 269 1

原创 C语言各种类型之间转换详解

目录1. C基本类型变量2. 符号扩展2.1 规则一:2.2 规则二:2.3 规则三:3. 零扩展4. 长类型转换为短类型5. 自动类型转换5.1 赋值时的类型转换5.2 运算时的类型转换6. 有符号和无符号数的比较6. 无符号数回绕参考资料:1. C基本类型变量char/short/int/long/long long 以及其对应的无符号类型,short/double等。基本类型输出格式符char%c, %d, %ushort%hdint%dlong%l

2021-07-15 15:50:18 4618

原创 Linux 0.11内核之系统调用机制

目录Linux系统调用1. 系统调用是什么?2. 为什么不能让用户程序直接访问内核资源3. 什么机制使得用户程序不能直接访问内核资源4. 用户程序怎样访问内核资源(以write()为例)4.1 展开为包含int指令的代码4.1.1 输入部分4.1.2 执行指令4.1.3 输出部分4.2 操作系统中断处理4.3 0x80号中断的中断处理程序Linux系统调用注:本文代码均取自Linux 0.11版本内核源码,下载链接:http://oldlinux.org/Linux.old/kernel/0.1x/,

2021-06-28 17:08:20 277

原创 Git常用命令底层实现机制

1 Git简介Git 是一个开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。其分布式特性主要体现为每一次的克隆操作,都是一次对代码仓库的完整备份,也就是在每个开发者本地都保存了整个项目开发迭代的完整备份,因此避免了集中式架构下中心服务器故障可能带来的数据丢失。下图分别为集中式(左)与分布式(右)系统示意图。2 Git工作区、暂存区和版本库首先先来理解下 Git 工作区、暂存区和版本库概念:**工作区:**就是工作目

2021-06-16 11:10:56 401

转载 VSCode配置C/C++环境(转载)

VSCode配置C/C++环境

2021-06-02 14:48:35 111

原创 如何解决递归中的重复计算(重叠子问题)

递归是一种自顶向下的、很直观的编程方法,解释性强。但在写递归的时候,最关键的问题是怎样避免递归过程中可能产生的大量重复计算,即重叠子问题,否则,写出来的代码即便没有逻辑错误,也几乎会因为超时无法运行。所以说,一旦选择了递归,基本上都要连同做后续的优化工作,这也是本文主要探讨的话题。由于递归代码是很容易写的,这篇文章要做的是在写好暴力递归之后,怎样进行优化,以避免重复计算。下面通过几个简单的例子说明(题目来自力扣):提示:不要关注题目内容,直接对比暴力递归代码和优化后代码,很容易找到优化套路,就在暴力基础

2021-05-26 10:09:10 2451

转载 C++STL库中sort函数用法(转载)

C++STL库中sort函数用法

2021-05-23 20:31:02 117

原创 c++优先队列(priority_queue)

优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。详见文末参考博客。对于queue和priority_queue,其基本操作的差别:queue可通过front()方法、back()方法分别访问队首、队尾元素,而priority_queue没有上述两种方法,只能通过top()方法访问队首元素。参考博客:c++优先队列(priority_queue)用法详解...

2021-05-19 23:09:26 183

转载 C++ STL set(转载)

C++ STL set容器完全攻略(超级详细)C++ STL set容器常用用法

2021-05-19 21:00:27 63

原创 c++ vector常用操作

目标: 实现vector容器内元素的反转,如由[1 2 3 4]变为[4 3 2 1]方法1:使用<algorthm>中的reverse()代码1:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ vector<int> v1{1,2,3,4}; reverse(v1.begin(), v1.end()

2021-05-17 19:31:17 5180 4

转载 linux 系统函数之 (dirname, basename)

linux 系统函数之 (dirname, basename)

2021-05-17 15:05:33 154

原创 整型与字符型运算

整型与字符型相加得到整型整型与字符型相加得到字符型

2021-05-10 19:41:12 2259

转载 C语言中的“>>”和“<<”

C语言中的“>>”和“<<”

2021-04-16 13:05:44 667

转载 格式化字符串函数sprintf与snprintf

菜鸟教程中关于这两个函数的说明如下:C 库函数 - sprintf()C 库函数 - snprintf()sprintf声明:int sprintf(char *str, const char *format, …)描述:C 库函数 int sprintf(char *str, const char *format, …) 发送格式化输出到 str 所指向的字符串。参数:str – 这是指向一个字符数组的指针,该数组存储了 C 字符串。format – 这是字符串,包含了要被

2021-04-06 21:42:25 311

原创 函数指针与指针函数

1. 函数指针如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。声明格式:函数返回值类型 (* 指针变量名) (函数参数列表)int (*fun)(int x,i nt y);int (*fun)(int, int)

2021-03-31 20:41:56 172

原创 dji osdk ros源码中demo代码枚举双冒号报错

如下图,为dji ros osdk中一个demo的源码,IDE为vscode,报错如下:经查找,红线部分前面的DJISDK为dji_sdk.h中定义的namespace,所以其后面用双冒号无可厚非。如下:但是报错部分为该namespace中定义的枚举,报错提示双冒号用于类名或namespace,所以直接去掉红线部分即可,如下:...

2021-03-29 15:28:20 176

原创 vscode找不到头文件的解决办法

vscode打开ros工作空间,很多头文件找不到,可以采用将找不到的头文件复制,在文件目录下全局搜索,然后将该头文件的上级目录包含进来。ctrl + shift + p 搜索 json,将搜索到的路径包含进去,如下图:{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**",

2021-03-27 00:25:43 13801 2

原创 win+ubuntu双系统完全删除ubuntu方法

windows+ubuntu双系统状态下,完全卸载ubuntu系统参考博客:彻底删除电脑中的ubuntu,删除BIOS启动项中的Ubuntu 启动/引导 选项 详细教程如何删除双系统下Ubuntu的导引?主要步骤概述:首先确定电脑分区类型,是否为GPT(GPT分区类型在安装双系统时,这类引导方案系统会建立一个EFI分区,里面装着你的引导器,比如 Windows 的 Windows Boot Manager 和 Linux 常用的 GRUB,此处要删除的就是 GRUB);使用磁盘工具DiskGe

2021-03-16 19:51:47 431

原创 微星gs65双系统制作

PC型号:微星gs65,单硬盘参考教程:Windows10安装ubuntu16.04双系统教程步骤概述:制作ubuntu系统盘(需要ubuntu镜像,软碟通刻录工具);制作空闲分区(借助DiskGenius软件实现磁盘管理,方便的完成磁盘压缩、扩展等功能,而系统自带的磁盘管理不能很好地完成不相邻位置磁盘分区合并等功能);重启,del进入bios,关闭快速启动(fast boot)、安全启动(secure boot),选择usb启动;插入u盘,安装,若没反应直接开机了,重启时,按F11,选择u

2021-03-15 17:05:02 339

原创 基于有名管道实现简单聊天功能

概述任务:实现ChatA与ChatB之间的通信功能;分析:匿名管道只能实现具有亲缘关系的进程之间的通信,为了实现两个无亲缘关系的进程间通信,需要使用有名管道技术。根据需求,需要建立两个管道,其中之一用于A写B读,另外一个相反。下面两种解决方案中,版本A在一个进程中(ChatA)循环写读数据,在另外一个进程(ChatB)中循环读写数据,可以实现ChatA和ChatB之间的通信,但存在的问题是:通信模式只能是ChatA发送给ChatB数据-ChatA接收ChatB数据-ChatA发送给ChatB数据…无法实

2021-01-13 14:55:25 1000

转载 strlen和sizeof的区别

本文转载自:strlen和sizeof的区别C语言中没有字符串,用的是字符数组来模拟字符串。C风格的字符串时字符数组然后在末尾加0表示结尾。在C语言中有strlen和sizeof两个函数求字符数组的长度函数,他们俩的区别就是是否把最后的结束标志也加上去。strlen是不加的,他表示字符串的长度。而sizeof求的是字符串在内存中的长度,所以它是加上最后的’\0’的所以一般而言后者的长度会比前者多1。#include<stdio.h>#include<string.h>

2021-01-13 14:29:45 417

原创 memset与bzero初始化

本文转载自:memset函数及其用法,C语言memset函数详解在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:# include <string.h>void

2021-01-13 11:13:08 387

转载 常用的ros指令

发布者节点的创建和运行ROS shell命令ROS 执行命令ROS 信息命令rostopic: ROS话题rosservice:ROS服务

2021-01-10 19:19:41 176

转载 函数声明后面的const用法

函数声明后面的const用法

2021-01-08 21:24:24 193

转载 c++中关于return的用法总结

c++中关于return的用法总结

2021-01-08 15:37:51 4569

转载 c++编译器为什么不支持模板的分离式编译

c++编译器为什么不支持模板的分离式编译

2021-01-08 10:14:43 83

原创 标准C库IO函数和Linux系统IO函数

标准C库IO函数标准C库IO函数相比于Linux系统IO函数为更高层的实现(前者的实现需要调用后者),具体使用哪一种视场景而定。虚拟地址空间文件描述符

2021-01-06 22:39:27 320

原创 GDB调试

什么是GDBGDB是由GNU软件系统社区提供过的调试工具,同GCC配套组成了一套完整的开发环境,GDB是Linux和许多类Unix系统中过的标准开发环境。一般来说,GDB主要帮助完成下面四个方面的功能:启动程序,可以按照自定义的要求随心所欲的运行程序可让被调试的程序在所指定的端点处停住(断点可以是表达式)当程序被停住时,可以检查此时程序中所发生的事可以改变程序,讲一个BUG产生的影响修正从而测试其他BUG准备工作通常,再为调试而编译时,我们会关掉编译器的优化选项(’-O’),并打开

2021-01-06 20:58:35 181

原创 Makefile

什么是Makefile一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile文件就像一个shell脚本一样,也可以执行操作系统的命令。Makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大提高了软件开发效率。make是一个命令工具,是一个解释Makefile文件中指令的命令工具,一般

2021-01-05 11:33:13 86

原创 windows下管理员用户与标准用户切换过程中的坑

Reference:win10出现若要继续,请输入管理员用户账户和密码net user命令集合详解1. 问题今天突然发现自己在windows下是以管理员身份运行的,为了安全考虑,通过下面操作将我自己的账户切换为标准用户:首先,管理员身份运行命令行(激活系统管理员):net user Administrator /active:yes登录Administrator用户,将自己的账户改为标准用户登录自己的用户但登录自己账户后,我又做了如下操作。。(关闭系统管理员)net u

2020-12-24 23:07:39 5767 2

原创 从高斯分布融合来理解卡尔曼滤波

References:tutorial:Products and Convolutions of Gaussian Probability Density Functionsblog:How a Kalman filter works, in pictures

2020-12-20 16:47:38 605 1

原创 静态库、动态库的制作、使用及区别

01 什么是库库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。库文件有两种,静态库和动态库(共享库),区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。库的好处:1.代码保密 2.方便部署和分发02 静态库的制作及使用命名规则libxxx.alib:前缀(固

2020-12-09 17:28:24 1449

原创 GCC

2020-12-02 22:41:37 172

原创 Linux开发环境搭建

1、 安装Linux系统(虚拟机安装、云服务器)https://releases.ubuntu.com/bionic/2、安装XSHELL、XFTP(对于个人用户、学生免费)https://www.netsarang.com/zh/free-for-home-school/通过XSHELL远程连接到Linux服务器(开发时不可能使用服务器的桌面端,只能通过远程连接的方式)。首先在Linux中安装SSH服务端。sudo apt install openssh-server通过XSHELL

2020-12-02 22:26:54 215

原创 C++中数组作为函数参数时为什么要传入数组长度

例子:将任意长度的整形数组传递给求和函数sum,返回数组中所有元素之和。写法1:#include <iostream>using namespace std;int sum(int arr[]){ int sum = 0; int len = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < len; i++) { sum += arr[i]; } return sum;}int main(){ int

2020-12-01 20:05:14 2404 2

原创 运行SVO报错fatal error: sophus/se3.hpp: No such file or directory

近日,参照此篇文章ubuntu16.04 ROS环境下配置和运行SVO配置并运行SVO时,到第(7)步编译svo时出现错误,错误信息很长,其实原因只有一个,如下:fatal error: sophus/se3.hpp: No such file or directory也就是说某个源文代码中没有找到sophus的头文件,出现链接错误.解决办法:参考博客:Sophus链接错误找到CMakeLists,如下:find_package( Sophus REQUIRED )include_d

2020-11-08 10:22:26 2979

蚁群算法ACA_TSP.py

资源提供了蚁群算法的python实现,用于求解旅行商优化问题(TSP),python 2 或 python 3 均可运行。

2020-04-05

遗传算法matlab代码实现.zip

资源提供了遗传算法(GA)的matlab的代码实现,其中按照遗传算法流程图,代码结构按照流程顺序,被划分为不同的独立模块,代码中以求非线性函数最大值为例,通过修改此代码可实现常见的优化问题求解。

2020-04-04

空空如也

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

TA关注的人

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