- 博客(57)
- 收藏
- 关注
原创 C++泛型编程(一)
好久没有写过博客了,最近需要封装一个泛编库,在做的时候发现遇到了一些困难,其实之前就分析处理过;只是未对疑难点进行总结,导致自己又重新处理一次疑难杂症。
2023-07-07 17:55:16
413
原创 C++面试题(二)
文章目录1. C语言中的static有什么作用?2. C++ const 有什么用?3. C与C++各自如何定义常量?有什么?4. 既然C++中有更好的const为什么还要使用宏?5. C++中引用和指针的区别?6. new/delete与malloc()/free()的区别?7. #include < a.h >与#include "a.h"有什么区别?8. 在C++程序中调用C编译器编译后的函数,为什么要加extern “C”?9. 什么是动态特性?10. 什么是封装?C++中是如何实现的?
2021-12-07 14:42:52
744
原创 C++面试题(一)
文章目录1. C和C++的特点和区别2. C++多态3. 虚函数实现4. C和C++内存分配问题5. 协程6. CGI的了解7. 进程间通信方式和线程间通信方式8. TCP握手和释放9. http和https的区别10. 虚拟内存的概念与介绍11. 单链表的反转算法12. 红黑树以及其查找复杂度13. KMP字符串匹配14. TCP超时等待、重传以及流量控制1. C和C++的特点和区别C语言的特点: 1.作为一种面向过程的结构化语言,易于调试和维护; 2.表现能力和处理能力极强,可以直接访问内存的物
2021-12-03 18:41:37
549
原创 C++之PIMPL
做过C++开发一段时间的都会比较清楚动态库和静态库;在这里就不对静态库和动态库做说明了,因为这不是重点(相信做C++开发的你,对这两种库类型也有自己的见解)。重点是,对库接口的封装上面;若我们封装的不好,发现对接口文件进行修改后,发现编译时比较慢;如果库和可执行程序不是一起进行编译的,还要手动进行库和头文件的更换,让人很难受。所以就引出了今天的PIMPL,多余的话不多说了,直接上干货吧!PIMPL什么是PIMPLPIMPL的优点参考代码什么是PIMPL PIMPL(Pointer to Implem
2021-12-03 16:06:46
322
原创 PCL库I/O模块之连接两个点云中的字段或数据形成新的点云
之前已经讲过PCL库的I/O模块,以及怎么用它去操作pcd文件。那么,在本篇中,是通过写代码学习如何连接两个不同点云为一个点云,进行连接操作前要确保两个数据集中字段的类型和维度相等。此外,还要学习如何连接两个不同点云的字段(例如,颜色、发线),这种操作的强制约束条件是两个数据集中点的数目必须一样,如,点云A是N个点的xyz点,点云B是N个点的RGB点,则连接两个字段形成点云C是N个点xyzrgb类型。#include <iostream>#include <pcl/point_typ
2021-12-02 16:33:20
743
原创 PCL库关于PCD文件的读写点云数据操作
前面已经简单说明了PCL库中I/O模块所具备的基本功能,以及里面各个类的功能等。详细信息可参考:https://blog.csdn.net/CFH1021/article/details/121638948?spm=1001.2014.3001.5502 那么今天主要来说明,怎么使用I/O模块中的类或者函数接口, 来操作PCD文件,例如读操作和写操作。#include <iostream>#include <pcl/point_types.h>#include <
2021-12-02 15:22:32
592
原创 PCL库中I/O操作
文章目录简介主要类说明1. class pcl::FileReader2. class pcl::FileWriter3. class pcl::FileGrabber4. class pcl::Grabber5. class openni_wrapper::OpenNIDevice6. class openni_wrapper::OpenNIDriver7. class openni_wrapper::OpenNIException8. class openni_wrapper::Image9. clas
2021-12-02 14:22:25
1915
原创 PCL中Octree模块中类的说明
文章目录1. class Octree2BufBase2. class OctreeBase3. class OctreeContainerBase4. class OctreeIteratorBase5. class OctreeKey6. class OctreeNodePool7. class OctreeNode8. class OctreePointCloud9. class OctreePointCloudAdjacency10. class OctreePointCloudAdjacencyC
2021-11-29 17:50:23
2354
原创 PCL中的八叉树
文章目录一、八叉树 1. 什么是八叉树 2. 计算原理 3. 数据结构 3. 存储结构二、PCL中的八叉树 1. 简介 2. 事例代码 建立空间索引在点云数据处理中已被广泛应用,常见的空间索引一般是自定向下逐级划分空间的各种空间索引结构,比较有代表行的包括BSP树、KD树、KDB树、R树、R+树、CELL树、四叉树和八叉树等索引结构,而在3D点云数据中应用较广泛的是KD树和八叉树。PCL对八叉树的数据结构建立和索引方法进行了实现,以方便再次基础上进行其它点云数据处理操作。一、八叉树 1. 什么是八叉树
2021-11-25 18:07:21
2563
原创 C++ 用__attribute__((deprecated(message)))管理废弃API
__attribute__((deprecated(message)))可用于管理废弃API函数或者变量,同时保留其兼容性#include <iostream>#define MY_DEPR(message) __attribute__((deprecated(message)))MY_DEPR("Please use test_fun2() instead.")int test_fun(){ return 0;}int test_fun_2(){ retu
2021-11-23 14:03:40
1159
原创 C++随机数生成
文章目录一、伪随机数生成1. rand()2. srand()3. 测试代码二、C++11随机数生成1. 随机数生成算法2. 随机数分布类型3. random_device一、伪随机数生成1. rand() rand()会返回一个随机数值,范围是在0至RAND_MAX间。RAND_MAX定义在stdlib.h头文件中,其值为2147483647。2. srand() srand()可以用来设置rand()产生随机数时的随机数种子。通过设置不同的种子,可以获取不同的随机数序列。例如,可以利用sran
2021-11-22 17:22:42
28697
原创 PCL中Kd tree的实现
文章目录kd-tree中的类说明1. class pcl::KdTree< PointT >2. pcl::KdTreeFLANN< PointT >事例代码 之前已经对kd-tree进行详细说明,并附有C++实现代码。kd-tree原理详解 PCL中kd-tree库也提供了kd-tree的数据结构,它是基于FLANN进行快速最近邻查找。最近邻查找在匹配、特征描述计算、邻域特征提取中是非常核心的操作。且它依赖与pcl_common模块。kd-tree中的类说明 kd-tree
2021-11-22 11:28:56
1687
2
原创 Kd tree原理详解
目录一、kd-tree简介二、kd-tree的实现过程1. kd-tree的创建2. 最近邻搜索三、kd-tree代码实现一、kd-tree简介 kd-tree(全称为k-dimensional tree),它是一种分割k维数据空间的点,并进行存储的数据结构;在计算机科学里,kd-tree是在k维欧几里德空间组织点的数据结构。Kd-tree是二进制空间分割数的特殊情况,常应用于多为空间关键数据的搜索,例如范围搜索和最近邻搜索。 kd-tree的每个节点都是k维点的二叉树。所有的非叶子节点可以看做为将一
2021-11-19 16:27:12
8019
1
原创 PCL中的异常机制
PCL在编写和应用的过程中,为了提高程序的稳健性,PCL提供了一套自己的异常处理机制。 PCL中的异常处理方式,依赖于内部自定的异常基类PCLException,它继承C++的std::runtime_error类。/** \class PCLException * \brief A base class for all pcl exceptions which inherits from std::runtime_error */class PCLException : public st
2021-11-17 11:20:18
906
原创 __func__,__FUNCTION__,__PRETTY_FUNCTION__的区别
在C语言中,常用获取函数名成的方法都有__func__、__FUNCTION__、__PRETTY_FUNCTION__。那么它们的区别是什么呢? 1) __func__、__FUNCTION__: 主要是获取函数的名称。 2) __PRETTY_FUNCTION__: 不仅能获取函数的名称,同样也能获取函数传递的参数。#include <iostream>using namespace std;int test_fun(int a, int b){ cout <
2021-11-17 10:43:40
2717
原创 PCL中的PointT类型
目录简介PCL中的PointT类型1. PointXYZ2. PointXYZI3. PointXYZRGBA4. PointXYZRGB5. PointXY6. InterestPoint7. Normal8.PointNormal9. PointXYZRGBNormal10.简介 PCL中的PointT是可以追溯到它在ROS中作为开源库被开发的时间点。点云是一个比较复杂的n维数据结构,它需要表示不同类型的信息。PCL中的PointT类型1. PointXYZstruct __attribute
2021-11-16 18:43:11
4081
原创 Linux __attribute__((aligned(n)))和#pragma pack
目录字节对齐1. 什么是字节对齐2. 字节对齐作用C语言中字节对齐1. __attribute__关键字2. pragma pack代码案例__attribute__扩展1. 函数属性2. 变量属性3. 类型属性字节对齐1. 什么是字节对齐 在C语言中,数据结构是一种复合的数据类型,其构成元素既可以是基本的数据类型(例如,int、long、char、bool等)的变量,也可以是复合数据类型(例如,数组、链表、数据结构等)的数据单元。在数据结构中,编译器为其每个成员按照正常边界进行空间分配。各个成员按
2021-11-16 14:34:45
1463
原创 PCL概述
目录一、什么是PCL二、PCL结构1. PCL架构图2. 模块介绍三、PCL应用场景1. 机器人领域2. CAD&CAM&逆向工程3. 激光遥感测量4. 虚拟现实&人机交互 PCL是什么?它有什么作用?一、什么是PCL 在说PCL之前,我们应该首先了解一下什么是Point Cloud(点云):它是一种数据结构,是用于处理多维度的点数据结构,在这里通常是指3维的数据结构。在3D 点云中,通常是指点在几何体系中的坐标信息,即x、y、z;若为4D时,会附加一个颜色的信息。 PCL(
2021-11-10 18:31:13
13663
原创 PCD文件格式
目录什么是PCD文件PCD版本 PCD文件内容 python加载PCD文件什么是PCD文件 Point Cloud Data,中文译为点云数据(简称PCD),它是一种存储点云数据的文件格式。其实文件格式有很多种,但是为什么还要重新定义一种新的文件格式呢?那是因为它们都无法满足PCL(Point Cloud Library)的数据处理需求。在PCD格式被定义之前,表示激光扫描仪获取的点云、任意多变形的文件格式有: PLY:表示多边形的文件格式; STL:CAD文件格式,用3d max或CAD软件处
2021-11-10 11:05:22
3145
原创 ubuntu18.04 安装安装PCL1.9.1库
目录1. PCL库介绍2. 安装依赖库3. pcl源码编译安装4. 测试程序 在一家AI公司工作了将近两年时间,从视觉到点云的神经网络,其中经历了很多,也学到了不少不东西;由于自己主要是做算法仿真的,一直没有特别的去深入学习pcl库;只知道它用于处理点云数据,但不知道它包含了什么样的功能,可以利用点云数据去做些什么功能操作。于是下定决心来学习PCL库。1. PCL库介绍官网:pointclouds.orgGitHub:github.com/PointCloudLibrary/pclPoint C
2021-11-09 15:58:31
3029
2
原创 ubuntu apt-get install --reinstall的使用
在使用apt-get install 安装某些软件的时候,会出现这样的错误:Depends: XXX(=YYY) but ZZZ is to be installed。我们可以尝试使用apt-get install --reinstall XXX=YYYE.g.libglib2.0-dev : Depends: libglib2.0-0 (= 2.40.2-0ubuntu1) but 2.42.0-2 is to be installed命令:apt-get install --reinstall
2021-11-09 14:34:48
6997
原创 KMP算法详解之C++
文章目录简介KMP算法实现创建模块串中的next字符串匹配 最近在深入的学习Linux上面的一些知识,感觉自己还欠缺很多,于是就开始动手学习。当我看到kmp算法的时候不知道它是干什么用的,在网上也翻阅了很多资料,有的写的还不错,有的写的很模糊;所以我也想写一篇关于KMP算法的详解(从我的角度),可能会有不好的地方,希望多多关照,敬请谅解! 简介 KMP算法是一种改进的字符串匹配算法,有D.E.Knuth、J.H.Morris和V.R.Pratt三位大神提出来的,称之为Knuth-Mo
2021-03-26 10:51:16
467
原创 10 大经典排序算法之C++实现
文章目录简介排序算法冒泡排序选择排序插入排序希尔排序归并排序快速排序堆排序计数排序桶排序基数排序简介排序算法是《数据结构与算法》中的最基本算法之一,这是需要熟练掌握的基本知识。排序算法可以分为内部排序和外部排序,内部排序是数据在内存中进行排序;而外部排序是因为数据量非常的大,无法一次性加载完所有的数据到内存中,在排序的过程中需要访问外存,例如磁盘。常见的内部排序算法有:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。各类算法的基本信息,如下表所示:
2021-03-23 17:22:43
235
原创 C++设计模式之外观模式(十)
Facade Pattern简介代码简介 外观模式(Facade Pattern)属于结构型模式,它隐藏了系统的复杂性,并向客户提供一个可以访问系统的接口。为子系统中的一组接口提供了一个统一的访问接口,这样使得子系统更加容易的被使用或者访问。使用场景:为了一个复杂的模块或子系统提供统一的外界访问接口;子系统相对独立,外界对子系统的访问属于黑盒操作;UML图:代码#include <iostream>#include <memory>class SubSy
2020-11-19 18:10:59
104
原创 C++设计模式之组合模式(九)
composite pattern简介代码简介 组合模式(Composite Pattern)是将多个对象组合形成树形结构,来表示具有“整体-部分”关系的层次结构。组合模式对单个对象(即:叶子构件)和组合对象(即:容器构件)的使用具有一致性,组合模式又被称为“整体-部分”(Part-Whole)模式,属于结构型模式。Component: 定义一个接口。Leaf: 为叶子构件,不包含组件构件。Composite: 为组合构件,包含子组件构件。代码// composite_pattern.
2020-10-22 15:23:45
124
原创 C++设计模式之装饰者模式(八)
decorator pattern简介代码简介 装饰者模式(decorator pattern)是在不改变原来类的成员变量和成员函数,以及其使用的继承关系的情况下,动态的扩展一个对象的功能。也是通过构建个一个包装类,来装饰指定的类,从而实现新的功能。Component: 定义一个抽象接口。ConcreteComponent: 定义一个具体的接口,继承于Component抽象接口。Decorator: 拥有一个抽象接口(Component)对象的实例,并实现一个和抽象接口一致的接口。Conc
2020-10-22 14:54:44
127
原创 C++设计模式之桥接模式(七)
bridge pattern简介代码简介 桥接模式(bridge pattern)是一种结构型模式;它是将抽象部分和实现部分进行分离,使它们都可以独立变化,互不干扰。常用于一个对象有多个变化因素,以及多个对象有共同的变化因素时,可以考虑桥接模式。Abstract: 用于定义抽象类的借口,并维护一个指向ImplementAbstract类实现的指针。RefineAbstractA/B: 扩充Abstract抽象类;在RefineAbstractA/B中可以调用在ImplementAbstract
2020-10-20 14:43:33
204
原创 C++设计模式之适配器模式(六)
adapter pattern简介代码简介 适配器模式(adapter pattern)是一种结构型模型,会将一种接口转换为另一种需要的接口,以便使用。适配器模式有两种,一是类模式适配器;另一种是对象模式适配器。类模式适配器:对象模式适配器: 优点: 1. 屏蔽具体实现的方法,实现了依赖倒转;2.把不方便使用的接口转换为统一接口,方便使用。代码class Target {public: Target() = default; virtual ~Target() = d
2020-10-20 11:42:32
101
原创 C++设计模式之原型模式(五)
prototype pattern简介代码简介 在C++中,我们清楚有浅拷贝和深拷贝两种方式去复制一个对象;浅拷贝和深拷贝的主要区别是对指针拷贝的处理:浅拷贝是共享指针;而深拷贝各个对象均有自己的内存空间,是相互独立、互不干扰的。 在类中,有一个默认的拷贝构造函数,它是浅拷贝;若想实现深拷贝,则需要重写拷贝构造函数。而原型模式(prototype pattern)是一种创建型设计模型,允许一个对象创建另一个可定制的对象,并且不需要任何处理。 优点: 1.简化对象的创建,不需要关注其对象创建过程
2020-10-19 15:00:20
148
原创 C++ 设计模式之建造者模式(四)
builder pattern简介代码简介 建造者模式(builder pattern),是将一个复杂对象的构建及其表示这两部分分离开来,并能通过同样构建方式构建不同的表示。 复杂对象的创建,通常是由多个子对象构建而成的;由于项目工程需求的不断变化,相应复杂对象的各部分同样也会发生变化,若重新去构建这个对象,会使得代码过于臃肿,不利于维护扩展。虽然,需求是变化的;但是,构建过程是不会发生变化。建造者模式,就是提供一种封闭机制,将变化和不变化的部分进行隔离开来(即创建对象是变化的,表示是不变化的)。
2020-10-19 12:12:01
122
原创 C++设计模式之工厂模式(三)
目录简单工厂模式简介说明code工厂方法模式简介说明code抽象工厂模式简介说明code 工厂模式属于创建型模式,可分为三类,简单工厂模式、工厂方法模式、抽象工厂模式;这三类模式是由易到难,由简到繁的。下面简单阐述一下这三种工厂模式简单工厂模式简介说明 简单工厂模式是工厂模式中最简单的一类;它是一个工厂生产多种不同的产品;对外隐藏类产品的实现细节,只暴露需要的产品类型。客户提供需要产品的产品类型给到工厂,就会返回相应的产品。客户只需要关心产品的基类类,不需要知道获取到的是哪一个子类。 使用场
2020-10-16 14:13:06
284
1
原创 C++设计模式之单例模式(二)
单例模式Singleton Pattern简介单例模式实现的方式1.饿汉式2.懒汉式3.线程安全方式4.泛编方式使用场合简介 单例模式(Singleton Pattern,又称单件模式),是一种使用非常广泛的设计模式。其目的是为了保证一个类之某程序中有且只有一个实例,并且提供了一个全局访问的接口,即该实例是被程序共享的。 单例模式的类图:#mermaid-svg-HSHPKp0ewT84cqc6 .label{font-family:'trebuchet ms', verdana, arial;
2020-10-11 21:00:12
131
原创 C++ 设计模式(一)
设计模式简介什么是GoF设计模式的类型创建型模式(Creative Patterns )结构型模式(Structural Patterns)行为型模型(Behavioral Patterns)简介 过去学习了所有的设计模型,但由于长时间的不使用,会逐渐的被遗忘掉;因此,最近又重新开始学习编程的设计模式;而我本身是从事C++相关的开发,网上关于C++的例子相对较少(大部分为java),故用C++代码实现了这些设计模式。 设计模式主要是针对面向对象语言提出的一种设计思想,主要是用于提高代码的可复用性,
2020-09-30 16:56:42
447
原创 python关于onnx模型的一些基本操作
onnx的基本操作一、onnx的配置环境二、获取onnx模型的输出层三、获取中节点输出数据四、onnx前向InferenceSession的使用1. 创建实例,源码分析2. 模型推理run,源码分析五、遇到的一些问题最近在对模型进行量化时候,模型格式转变为onnx模型了,因此需要对onnx进行加载、运行以及量化(权重/输入/输出)。故,对onnx模型的相关操作进行简单的学习,并写下了这边博客,若有错误请指出,谢谢。一、onnx的配置环境onnx的环境主要包含两个包onnx和onnxruntime,我们
2020-09-23 18:16:09
36126
6
原创 C++11与线程相关的新特性
C++11 与线程相关的新特性std::threadstd::mutexstd::lock相关std::atomicstd::call_oncestd::condition_variablestd::futurestd::asyncstd::thread 在C++11之前我们会用pthread_xxx来创建线程,相对来说是比较繁琐且不易读的。因此C++11引入了std::thread来创建线程,支持对线程join或者detach的操作,代码如下:#include <thread>#
2020-07-13 13:51:25
325
原创 KNN实现MNIST数字分类
KNN实现MNIST数字分类import torchfrom torch.utils.data import DataLoaderimport torchvision.datasets as dsetsimport numpy as npimport operatorbatch_size = 100data_path = './'def KNN_distance(k, dis, trains_1, labels_2, test): #曼哈顿距离(Manhattan distan
2020-06-22 22:55:09
1025
1
原创 C++11 auto 和decltype的使用
auto和decltype的使用autoauto使用的限制auto 的推导规则decltypedecltype 的推导规则auto和decltype的配合使用autoC++编程时,常常需要把表达式的值赋给变量,需要在声明变量的时候清楚的知道变量是什么类型。然而做到这一点并非那么容易,有时候根本做不到。为了解决这个问题,C++11新标准就引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来那些只对应某种特定的类型说明符(例如 int)不同。auto 让编译器通过初始值来进行类型推
2020-05-30 23:30:55
1648
原创 深度学习之——KNN算法(k-最近邻算法)
k-最近邻算法基础理论欧式距离(Euclidean distance)曼哈顿距离(Manhattan distance)代码实例 在学习深度和图像识别的时候,看见了一个比较有意思的算法——KNN算法,该算法是图像分类中最简单的算法之一。基础理论 KNN算法全称是K-最近邻算法,英文名称是K-NearestNeighbor,简称为KNN;从算法名称上,可以猜出,是找到最近的k个邻居,在选取到的k个样本中选取出最近的且占比最高的类别作为预测类别。如下图所示:KNN算法 上图所指示,蓝色的正方形
2020-05-15 18:46:03
7327
原创 详解激活函数Mish
激活函数Mish 对YOLO有了解的或者从事人工智能的相关人员,都知道前段时间yolov4出来了,而且相对于yolov3在精度上有一个质的飞跃,让人感觉匪夷所思,于是在好奇心的驱使下,了解了一下yolov4;与yolov3相比较,主要有几个不同点:网络层更深了、激活函数将leakyRelu替换为mish、采用了SPP(空间金字塔池化)等。下面主要学习一下激活函数mish: 在论文“Mish: A Self Regularized Non-Monotonic Neural Activation Fun
2020-05-13 16:16:50
12456
3
原创 神经网络CNN之池化层
池化层简述池化层的分类最大/均值池化中值池化组合池化Spatial Pyramid PoolingGlobal Average/Max Pooling参考文献简述 池化层(Pooling Layer)是CNN中常见的一种操作,池化层通常也叫做子采样(subsampling)或降采样(Downsampling),在构建CNN网络时,往往是用在卷积层之后,通过池化层来降低卷积层输出的特征维度,在有效减少网络参数的同时还可以防止过拟合现象。 说到池化操作,就会想到我们经常用的池化操作,即最大池化(Max
2020-05-08 18:06:16
7133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人