- 博客(49)
- 问答 (1)
- 收藏
- 关注
原创 日志记录工具 C++ linux
介绍使用logfile.h 和 logfile.cpp 两个文件实现功能.class类定义#include<ros/ros.h>#include<fstream>#include<sys/types.h>#include<sys/stat.h>//引入系统库,使用该库中的方法创建文件夹#include<iostream>#include<dirent.h>//文件夹处理相关函数库#include<string&
2022-04-25 13:52:55
2269
原创 ros功能包中添加功能包或者添加库文件时CMakeLists.txt文件的编辑
1.在package1中导入package2(package2中包含头文件headfile.h),使得package1中的main1.cpp能够引入使用headfile.h。2.让package1中的main1.cpp使用库文件(两个文件cJSON.h cJSON.c)。
2022-04-01 18:55:40
2254
2
原创 使用C++ 实现TCP server
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言1.头文件2.main函数3.相关函数3.1 subcallback3.2 server与client的交互函数3.3 循环向所有连接发送信息的函数总结前言工作内容:为每个连接建立线程进行交互,并单独使用一个线程向所有连接持续发送相同数据.主线程执行等待连接. 本实现在ros下,使用C++语言和如下头文件所示的相关库.1.头文件#include <arpa/inet.h> #include &l.
2022-03-29 10:05:17
6310
8
原创 ros C++ msg功能包
这里写自定义目录标题创建功能包创建message编辑package.xml编辑CMakeList.txt参考文章:创建功能包cd catkin_ws/srccatkin_create_pkg my_msg_package std_msgs message_generation创建message在功能包下创建文件夹my.msg,在该文件夹下创建.msg文件并编辑。int32 data1string data2编辑package.xml在该文件中std_msgs和message_runti
2022-03-16 15:07:41
1548
原创 网络层,运输层相关协议
文章目录网络层ARP 地址解析协议IP协议ICMP 网际控制报文协议互联网的路由选择协议:RIPOSFPF(Open Shortest Path First)开放最短路径优先BGP边界网关协议IPV4和IPV6运输层UDP 用户数据报协议TCP 传输控制协议停止等待协议 ARQ自动重传请求连续ARQ协议TCP流量控制TCP的拥塞控制TCP的运输连接管理网络层ARP 地址解析协议向上提供简单无连接尽最大努力交付的数据报服务,网络层不提供服务质量的承诺。ARP 地址解析协议每一台主机都设置一个ARP
2021-09-30 00:57:41
619
原创 C++中多线程的创建方式总结
文章目录使用函数作为参数创建线程函数无参函数有参使子线程结果影响主线程unique_ptr和ref()使用类作为线程对象的参数用lambda表达式定义线程使用函数作为参数创建线程函数无参使用一个无参函数创建线程,thread 的构造接受一个参数,即函数名。//编写一个函数作为线程的执行路径void myprint() { cout << "我的线程开始运行" << endl; cout << "我的线程开始运行" << endl; cout
2021-05-21 16:31:03
1034
8
原创 关于智能指针的一些使用 auto_ptr shared_ptr unique_ptr
文章目录前言auto_ptrunique_ptrshared_ptr前言1.智能指针ps有一个析构函数, 该析构函数将在ps过期时释放它指向的内存。2.使用智能指针需要包含的库#include<memory>3.智能指针使用泛型,所以应该用泛型定义方式。//创建智能指针时必须提供额外的信息,指针可以指向的类型: shared_ptr<string> p; shared_ptr<vector<int>> a; /*最安全的分配和使用动态内存的方
2021-05-20 00:48:12
172
原创 C++内存分配机制详解(附代码)
文章目录内存分配的过程:分配内存释放内存内存管理实例1实例2实例3内存分配的过程:分配内存1.new() new是用于创建对象的函数,它通过调用operator new()来完成空间的分配,通过parameter new将对象在已分配的空间中创建。2.operator new() 全局函数,它返回一个void*型的指针,该指针指向分配到的内存,operator new()通过调用malloc获得内存。3.parameter new 它的使用方式为new(pointer)className(par
2021-05-13 22:03:35
1201
4
原创 可扩容的线性表的C++实现
文章目录头文件:线性表的定义和包含的成员函数部分函数实现逻辑扩容ListExpansion(int )缩容ListShrinkage()有参构造函数CreateList(ElemType, int)初始化函数InitList( )获取某个元素第一次出现的位置LocateElem(ElemType)插入一个元素ListInsert(int , ElemType )删除一个元素ListDelete(int, ElemType&)批量添加ListInsertAll(int, ElemType*,int )
2021-05-12 18:39:59
720
原创 (5)MFC static text控件的使用和用static text显示图片
文章目录创建static text控件用Button控件添加事件更改显示内容用MessageBox显示text中的内容用static text控件控件显示图片附 :Button控件也可以更改内容创建static text控件使用工具箱添加static text控件,并更改其显示内容为 first,右击该text控件选择添加变量,将访问权限设置private,并对变量命名FirstText,完成后即可在Dig.cpp文件的DoDataExchange函数中被关联(变量名与控件关联),同时在Dig.h文件中
2021-05-10 11:32:07
1700
原创 (4)MFC模态对话框于非模态对话框的创建
文章目录Model Dialog and Modeless Dialog在MFC项目中创建创建按钮创建窗口为按钮添加单击事件:弹出模态框为按钮添加单击事件:弹出非模态框123注意模态对话框创建使用DoModal(),非模态使用Create().Model Dialog and Modeless Dialog所谓模态对话框(Model Dialog )就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框(Modeless Dialog),当被打开时,用户
2021-05-09 23:50:24
628
原创 (3)创建第一个MFC程序
文章目录应用程序类型生成的类注意:应该将文件的视图方式改为:视图->类视图注意:更改窗口大小Create和OnCreate的区别扩展知识应用程序类型生成的类将会生成4个类,其中:App类继承于CWinApp;CMainFrame类继承于CFrameWnd;View类继承于CView;Doc类继承于CDocument;即App为应用程序类,MainFrame为窗口框架类。View类用于存放需要显示的内容,关于显示的东西都写到View文件中。Doc类用于管理数据文档注意:应该
2021-05-09 23:01:59
152
原创 (2)MFC消息映射机制
使用消息映射需要将分界宏写入到.cpp文件中//分界宏BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)//分界开始点END_MESSAGE_MAP()//分界结束点同时在.h文件的CFrameWnd子类中声明宏//声明宏,提供消息映射机制 public: DECLARE_MESSAGE_MAP()这样就可以使用消息了。将需要使用的消息的宏放入到分界宏中间,如://分界宏BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) //消
2021-05-09 20:07:19
155
原创 C++实现二叉树结构及其二叉树常用算法
文章目录头文件成员函数构造函数创建二叉树CreateBTNode输出二叉树DispBTree查找指定节点FindNode查找左、右孩子节点求树高BTreeHeight递归遍历非递归遍历前序遍历头文件使用node 定义节点,并重命名为BTNode。二叉树类 BTree中含有一个成员BTNode* head;存放二叉树的头节点。typedef int ElemType;const int MaxSize = 20;//二叉树链式存储结构typedef struct node { ElemT
2021-05-09 20:06:32
3827
原创 (1)在空项目下编写并运行MFC
文章目录1.在VS下建立一个空项目,并创建一个头文件`mfc.h`和一个源文件`mfc.cpp`2.在头文件中写入以下代码3.在mfc.cpp文件中实现InitInstance()和MyFrame()1.在VS下建立一个空项目,并创建一个头文件mfc.h和一个源文件mfc.cpp2.在头文件中写入以下代码#include<afxwin.h>//mfc头文件class MyApp :public CWinApp {//CWinApp应用程序类public: //程序入口 virtu
2021-05-09 19:55:26
722
原创 错误 LNK2019 无法解析的外部符号 _main函数 “int __cdecl invoke_main(void)“中引用了该符号
出现错误:严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK2019 无法解析的外部符号 _main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中引用了该符号 Project2 D:\project\vc2019userproject\vc2019userproject\Project2\msvcrtd.lib(exe_main.obj) 1 解决方法:调整位置在项目的属性->链接器->系统->子
2021-05-09 12:15:10
12341
21
原创 图的java实现以及深度优先搜索和广度优先搜索
泛型。使用HashMap存放所有节点,每个节点保存value以及与该节点直接相关的边,这样使得很多对图的操作变得十分简单甚至显而易见。
2020-08-08 09:37:38
319
原创 java集合ArrayDeque、LinkList、Stack分别分析与区别(最新)
ArrayDeque基本特征public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable1.实现了Deque使其具有作为双端队列和作为栈的能力。2.实现了Cloneable它可克隆。3.实现了Serializable表明可序列化。4.(没有实现RandomAccess,表明不支持随机
2020-08-05 11:12:32
1154
原创 java中对象的序列化流(ObjectOutputStream)和反序列化流(ObjectInputStream)
java.io.ObjectOutputStreamjava.io.ObjectOutputStream extends OutputStreamObjectOutputStream:对象的序列化流*作用: 把对象以流的方式,保存到文件中存储,叫写对象*构造方法:**ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream。*参数:**OutputStream out:字节输出流*特有的成员方
2020-08-03 23:04:16
323
原创 java中OutputStreamReader和OutputStreamWriter
java.io.OutputStreamWriterjava.io.OutputStreamWriter extends WriterOutputStreamWriter是字符流通向字节流的桥梁,可使用指定的charset ,将其写入流中的字符编码为字节构造方法:*OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。*OutputStreamWriter(OutputStream out, String cha
2020-08-03 16:39:17
490
原创 java字节缓冲输出流(BufferedOutputStream)和字节缓冲输入流(BufferedInputStream)
java.io.BufferedOutputStreamjava.io.BufferedOutputStream继承关系:*FilterOutputStream extends OutputStream*BufferedOutputStream extends FilterOutputStream构造方法:*BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。*BufferedOutputStream(Outpu
2020-08-03 12:24:30
799
原创 java.util.Properties类 关于读取和写入的说明和测试
java.util.Properties*public class Properties extends Hashtable<Object,Object>*Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。*Properties集合是一个唯一和IO流相结合的集合*可以使用Properties集合中的store方法,把集合中的临时数据持久化写入到硬盘中*可以使用Properties集合中的load方法,把硬盘中的文件(键值对)放到集合中使用*
2020-08-02 21:43:19
375
原创 java文件字符输入流(java.io.FileReader )和文件字符输出流(java.io.FileWriter )
java.io.Reader*java.io.Reader 用于读取字符流的抽象类。 子类必须实现的唯一方法是read(char [],int,int)和close()。*abstract void close() 关闭流并释放与之相关联的任何系统资源。*int read() 读一个字符*int read(char[] cbuf) 将字符读入数组。*abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。java.io.Fil
2020-08-02 16:22:07
337
原创 java中接口使用注意事项
接口使用 interface 关键字定义,没有构造方法,不能创建对象,只能定义公开静态常量和公开抽象方法。接口中所有属性都是公开静态常量,隐式使用public static final 修饰。j接口中所有方法都是公开抽象方法,隐式使用public abstract 修饰。接口中没有构造方法、动态代码块、静态代码块。java为单继承,当父类的方法种类无法满足子类需求时,可以通过实现接口扩充能力。同时, 接口支持多实现。实现接口中抽象方法时,访问修饰符必须是public接口可以声明引用,以指向实现.
2020-08-02 10:15:15
245
原创 java文件字节输出流(java.io.FileOutputStream)和文件字节输入流(java.io.FileInputStream)
java.io.OutputStream这个抽象类是表示字节输出流的所有类的超类。定义了一些共性成员方法:—void close() 关闭此输出流并释放与此流相关联的任何系统资源。—void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。—void write(byte[] b) 将 b.length字节从指定的字节数组写入此输出流。*一次写入多个字节:*如果写的第一个字节是正数(0-127),会查询ASCII表*如果写入的第一个字节是负数,那么第一个字节会和第二个字节组成中文
2020-08-02 10:14:02
677
原创 java.io.File 类的相关方法详细说明和部分测试代码
java.io.File 类文件和目录路径名的抽象表示形式java把电脑中的文件和文件夹封装成了一个File类,我们可以使用File类对文件和文件夹进行操作File类是与系统无关的类,任何一个系统都可以使用它里面的方法静态修饰符----static String pathSeparator //路径分隔符,与系统相关的路径分隔符字符,为方便起见,表示为字符串。—static char pathSeparatorChar //与系统相关的路径分隔符。—static String separ
2020-07-31 22:32:49
223
原创 java线程的简要介绍和测试代码
线程的实现方式实现线程的第一种方式//实现线程的第一中方式,使用继承Thread来实现线程class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 50; i++) { System.out.println(Thread.currentThread().getName().toString()+"_"+i); try { Thread.sleep(500);
2020-07-31 16:07:43
126
原创 十大排序算法简要分析和优化过程的java代码实现
前期准备添加比较方法://两个比较大小的方法protected int cmp(int i1,int i2) { return array[i1].compareTo(array[i2]); }protected int cmp(E v1,E v2) { return v1.compareTo(v2); }//用于数组中下标为i1和i2的两个元素交换的方法protected void swap(int i1,int i2) { swapCount++; E temp=ar
2020-07-24 11:41:02
146
转载 优快云 博客等级获取及介绍
SDN博客提升等级方法1.每发布一篇原创或翻译文章:10分;2.每发布一篇转载文章:2分;3.博主的文章被评论一次:1分;4.发表评论:1分(自己给自己评论、博主回复评论不获得积分);5.博文阅读每超过100次:可获得1分,高加到100分,即文章点击上万次截止;6.文章投票:顶1票加1分,踩1票减1分;7.文章被管理员或博主本人删除,相应减去博主该篇博文所获得的分数;8。评论被管理员或博主删除,相应减去发评论者和博主该评论各自获得的分数(应减积分每周固定时间清理一次);开设相应抄袭举报功能
2020-07-22 10:27:25
411
1
原创 二叉堆主要方法的java实现
二叉堆接口public interface Heap<E> { int size(); boolean isEmpty(); void clear(); void add(E element);//添加元素到堆 E get();//取堆顶元素 E remove();//删除堆顶元素 E replace(E element);//删除堆顶元素的同时插入一个新元素}大顶二叉堆的实现存储结构对于采用二叉树结构的堆,使用数组存储结构,可以不需要有额外的保存左右孩子节点和父亲
2020-07-17 15:22:39
268
原创 使用哈希表和红黑树实现映射
如图所示,使用哈希表和红黑树实现映射的存储结构如图,哈希表构造员工节点数组,存储<K,V>节点类型, 当添加节点时,通过key计算的hash值对应的数组index位置如果没有元素,就将当前节点的数据添加到该index指向的位置;若通过key计算的hash值对应的数组index位置有元素(即发生了hash碰撞),就将节点添加到以该位置元素为root节点的红黑树中。节点添加方法添加节点时如果没有发生hash碰撞,直接将元素放到对应位置,作为该位置的红黑树的根节点。如果发生碰撞,从该位置的根节
2020-07-11 22:22:26
420
原创 哈希表基本概念、哈希函数一般实现思路
哈希表:哈希表维持一个数组,对每个添加的元素,利用哈希函数生成key对应的index,将key相关数据存放在数组中。以使得每次存取或查找元素时间复杂度为O(1)。哈希表是“空间换时间”的典型应用。哈希冲突是指对不同key计算出相同的index值,此时一般解决办法是在该索引位置构造单链表,将相同index值的不同key构造的单链表存放到同一个index的数据域(该数据域存放单链表表头地址)中。哈希函数:哈希函数满足以下条件:1.对于同一个key每次计算必须得出同一个index值。2.应充分利用k
2020-07-09 21:48:24
393
原创 集合(set)和映射(Map)接口应实现的方法(java)
集合集合是一种具有去重功能的数据结构,它与其他数据结构(如链表,数组,树)的区别也是因为它的添加元素方法(add方法)会对元素是否存在进行判断。它底层可以使用链表,数组,树等实现。一个集合中不能存放两个相同的元素。集合中的元素用红黑树实现时元素必须具有可比较性。其接口中方法如下:public interface set<E> { int size(); boolean isEmpty(); void clear(); boolean contains(E element); v
2020-07-08 22:32:59
232
原创 红黑树添加元素和删除元素后的处理逻辑分析
以下代码和实现思路来源于B站视频“恋上数据结构与算法”,地址: https://www.bilibili.com/video/BV13v41167ix?红黑树的性质1.节点是RED或BLACK2.根节点是BLACK3.叶子节点(外部节点,空节点)都是BLACK4.RED节点的子节点都是BLACK4.1 RED节点的parent节点都是BLACK4.2 从根节点到叶子节点的所有路径上不能有2个连续的RED节点5.从任意节点到叶子节点的所有路径都包含相同数目的BKACK节点红黑树通过将BLA
2020-07-06 21:34:16
444
原创 AVLTree节点失衡处理java代码
以下代码和实现思路来源于B站视频“恋上数据结构与算法”,地址: https://www.bilibili.com/video/BV13v41167ix?前期准备BinaryTree的Node节点类中添加两个方法,用于判断当前节点为其父节点的左孩子节点或右孩子节点 //判断某个节点为父节点的左子节点 public boolean isLeftChild() { return parent!=null&&parent.left==this; } public
2020-07-06 11:01:21
216
原创 BinarySearchTree(二叉搜索树)的java泛型实现
对于BinarySearchTree类,一般的设计思想是使用 BinaryTree类作为BinarySearchTree类的父类,在BinaryTree类中实现二叉树的通用功能,再在BinarySearchTree类中实现它的特有功能。BinaryTree类类定义中的成员:对BinaryTree类的定义使用一个内部的节点类对每个节点进行定义,包含E类的element,和三个Node类的指针left,right,parent.其中isLeaf方法和hasTwoChildren用于判断节点类型在这里
2020-07-05 13:10:52
483
原创 数据结构教程—哈夫曼树的构造算法
哈夫曼树算法如下(1)根据给定的n个权值,使对应节点构成n棵二叉树的森林,其中每棵二叉树都只有一个根节点,其左右子树均为空。(2)在森林中选取两棵节点权值最小的子树分别作为左右子树构造一棵新的二叉树,且置新的二叉树的根节点的权值为其左右子树上根节点的权值之和。(3)在森林中,用新得到的二叉树替代选取的两棵树。(4)重复(2)和(3),直到只含有一棵树为止,这棵树便是哈夫曼树。构造过程图如下:测试分析为了便于操作,使用数组存放二叉树,并用一个HTNode存放节点,数组下标为【0~n-1】的位置
2020-06-10 13:07:40
10500
空空如也
EasyX怎样才能实现“键盘输入控制图片移动”的功能
2020-07-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人