自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符串匹配

因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP写过KMP,一定都写过next数组,next数组就是一个前缀表,前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。例子:文本串:aabaabaafa 中查找是否出现过一个模式串:aabaaf可以看出,文本串中第六个字符b和模式串的第六个字符f,不匹配了。如果暴力匹配,会发现不匹配,此时就要从头匹配了。

2024-01-04 13:38:45 997 2

原创 PaddlePaddle初使用

*注意:**如果是在自己的数据集上训练的模型,并且调整了中文字符的字典文件,请注意修改配置文件中的character_dict_path为自定义字典文件。如果训练时修改了文本的字典,在使用inference模型预测时,需要通过–rec_char_dict_path指定使用的字典路径。

2024-01-03 13:19:53 807

原创 高斯矩阵相乘

如图所示绿色和红色分别代表两个独立的高斯分布函数,蓝色为两个分布的乘积,从蓝色形状可以粗略的看出乘积结果可能为一个幅值被压缩的高斯分布,其期望在。两个高斯分布相乘的分布函数即推导出来,即相乘后的分布函数为一个被压缩或者放大的高斯分布,为缩放因子,相乘后的概率密度的积分不等于1,但其方差和均值性质不变,所以。平时我们大多数情况下会看到情况①,那什么情况下才能出现情况②呢?只有一个交点时,即是一个情况②可能出现的临界,(这个临界。,也就是我们常说两个高斯分布相乘同样服从高斯分布。我们手动仿真了一些情况,如下。

2024-01-02 13:22:20 1031

原创 旋转矩形问题

矩形的坐标是旋转前的坐标:矩形A(left1,top1,width1,height1,angle1)矩形B(left2,top2,width2,height2,angle2)

2023-12-29 14:33:27 872

原创 Jetson Device记录

tx-utils/tegrastats是基于此做的改进,一个nvidia jetson tegra x系列的工具包。主要用来记录tx板子的状态,并将其写入excel表格,便于生成图表。2.上面最后一行命令有的文件夹不存在会有提示,但是不影响,只要把已安装的opencv的include和lib删掉就行,也可以手动删除,总之删除干净即可。Nvidia自带了一个tegrastats工具,默认位于home目录下。安装3.,4.的版本都不行,最后安装2.0的版本解决问题。1.先到opencv编译安装的目录下。

2023-12-21 13:59:38 386

原创 CMake初始用

CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,符号"#"后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。

2023-12-19 13:26:24 802

原创 ffmpeg相关命令

还有一个参数-to放在-i video.mp4后面,作用是指定剪辑时长,例如-to 00:02:00,当-ss放在-i前面的时候,这个-to剪辑出来的是-ss指定的时间轴加上-to指定的时间,比如-ss 00:01:00 -i video.mp4 -to 00:02:00,则剪辑出来的视频,是原视频00:01:00到00:03:00的片段。以上命令代表将原视频文件00:03:00到00:05:00的片段剪辑出来,生成为cut.mp4文件在当前文件夹,并且使用编码为copy复制源视频文件的编码格式。

2023-12-11 10:32:46 647

原创 linux进入emergency mode

linux系统进入emergency mode模式。

2023-12-08 15:40:58 519

原创 c++ std::variant用法

在 C++17 之前,为了改进这些问题,提出了std::variant。

2023-11-21 11:19:38 247

原创 好用的读书网站

配合在线待理站点使用 https://proxyium.com/

2023-11-08 10:01:44 1128

原创 C++ 多态

多态性(polymorphism)可以简单地概括为“一个接口,多种方法”,多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。C++运行时多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(Override),或者称为重写。多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,地址是早绑定的。

2023-11-06 16:34:40 128

原创 c++ count和count_if

algorithm头文件下的count用于元素的计数,使用对象包括vector,list,set,数组等。first, last:在元素序列的初始和最终位置输入迭代器。使用的范围是[first,last),它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。val:要匹配的值。返回值:范围[first,last)中等于val的元素数。返回类型是有符号整数类型。关联容器map和set自带count函数,由于去重性,返回值只能是1或0,可以借此判断该元素是否存在。

2023-10-17 14:09:02 269

原创 c++ any_of,none_of,all_of

【代码】c++ any_of,none_of,all_of。

2023-10-17 13:52:15 129

原创 boost Geometry

boost作为C++中最常用的第三方库,Geometry库里面拥有大量的开源算法。Boost.Array:适用于 Boost.Geometry中不同的点类型Boost.Fusion:自定义不同的点的结构并适配 Boost.Geometry点的处理方法,因此,可以调用许多Boost.Geometry算法Boost.Tuple:组成的点集也可以使用算术运算,元素可以用作 Boost.Geometry 内部的点。

2023-10-13 14:21:47 1378 1

原创 c++ fmt

fmt 是一个文本格式库,可以代替 C 的 stdio 和 C++ iostreams。实现了 C++20 的 std::format 标准。

2023-10-09 09:56:57 280

原创 c++ 智能指针

C++中的一个常见的错误就是。大部分情形中,这些bug来自动态分配内存和指针的使用:当多次释放动态分配的内存时,可能会导致内存损坏或者致命的运行时错误;当忘记释放动态分配的内存时,会导致内存泄露。智能指针可以帮助管理动态分配的内存。其来源于一个事实:栈比堆要安全的多,因为栈上的变量离开作用域后,会自动销毁并清理。智能指针结合了栈上变量的安全性和堆上变量的灵活性。申请了一份动态内存,使用之后释放了它。但是很容易会在函数结束前释放它,有一些原因会导致内存无法得到释放,比如函数提前终止。

2023-09-28 15:47:20 90

原创 c++ chrono

chrono是一个time library, 源于boost,现在是C++标准使用时,需要导入chrono,其所有实现均在std::chrono namespace下。chrono是一个模版库,使用简单,功能强大,有三个重要概念:duration、time_point、clock。

2023-09-26 14:23:02 268

原创 c++ std::reference_wrapper

reference_wrapper是一个模板类用类型T实例化的reference_wrapper类能包装该类型的一个对象,并产生一个reference_wrapper< T >类型的对象,该对象就像是一个引用,与普通引用最大的不同是:该引用可以拷贝或赋值。特点:没有默认构造函数,可以用一个想要引用的对象构造,或者用另一个reference_wrapper对象构造。

2023-09-26 13:42:46 167

原创 c++ unordered_set

可直译为“无序 set 容器”,即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。本质是使用hash散列的方式存储数据,是一种使用hash值作为key的容器,所以当有频繁的搜索、插入和移除拥有常数时间。unordered_set存储原理是声明一个有n个桶的数据结构,计算加入到unordered_set的新的值hash,然后计算hash%n后的值x,将新的值加入到桶x中。

2023-09-21 11:23:01 492

原创 c++ decltype

decltype 是“declare type”的缩写,译为“声明类型”。C++11 新增的一个关键字,和 auto 的功能一样,都用来在编译时期进行自动类型推导。

2023-09-20 14:02:05 338

原创 c++ vector

(1)默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。(2)两种方式等价 ,list2 初始化为list 的拷贝,list必须与list2 类型相同,也就是同为int的vector类型,list2将具有和list相同的容量和元素。

2023-09-19 13:34:17 342

原创 c++结构体调用类的构造函数

结构体构造函数中未赋值所有的变量,其中class会调用该类的构造函数。结构体初始化会调用构造函数。

2023-09-12 14:10:27 134

原创 c++ static

静态在一个类中意味着特定的东西。这意味着在类的所有实例中,这个变量只有一个实例。如果某个实例改变了这个静态变量,它会在所有实例中反映这个变化。静态方法也是一样,无法访问类的实例。静态方法不需要通过类的实例就可以被调用。

2023-09-08 10:55:23 154

原创 c++ noexcept

一个 std::vector,若要进行 reserve 操作,一个可能的情况是,需要重新分配内存,并把之前原有的数据拷贝(copy)过去,但如果 T 的移动构造函数是 noexcept 的,则可以移动(move)过去,大大地提高了效率。在为某个异常进行栈展开的时候,会依次调用当前作用域下每个局部对象的析构函数,如果这个时候析构函数又抛出自己的未经处理的另一个异常,将会导致 std::terminate。需要注意的是,编译器不会检查带有 noexcept 说明符的函数是否有 throw。

2023-09-06 15:52:19 240

原创 c++ 回调函数,std::function,std::bind

定义回调函数的指针类型,包括返回值类型、(*类型名)函数指针、参数表回调函数的使用者函数符合函数指针类型的实现函数实现函数的类型必须要和函数指针的类型声明一致,也就是返回值和参数表(个数、类型)要完全一致。

2023-09-05 14:58:36 458

原创 git使用

误删除本地.git文件夹,可以重新建立连接。将已有的repository上传到git。创建一个新的repository。删除远程git仓库的文件/文件夹。设置global config。将已有的文件上传到git。

2023-09-04 15:38:21 505

原创 c++ folly::baton

Baton 通常用作线程间同步、等待、通知的标识符号,常用姿势是,一些线程调用 wait() 方法等待另一些线程完成某项工作,其完成以后调用 post() 方法进行通知。其跟一般PV信号量的区别是,Baton更轻量化、通知策略更简单(没有FILO/FIFO等策略)、仅能够通知一次,在简单场景中更高效。

2023-09-01 13:34:12 371

原创 c++ expected

和std::optional差不多,但是std::optional只能表示有正常的值或者为std::nullopt,即空值。而std::expected则可以表示一个期望的值和一个错误的值,相当于两个成员的std::variant,但是在接口上更方便使用。可以把它当作新的一种的错误处理方式。

2023-08-31 11:12:07 385

原创 pkg-config

编译配置的时候,需要依赖的库不一定都在 /usr/local/include 目录下,大部分情况下需要对编译器手动指定 include 目录,同理也可能需要对链接器手动指定 lib 所在目录,而由于不同系统下安装的库所在的目录不一定一致,会导致编译配置难以跨平台执行,可以用 pkg-config 来解决这个问题。

2023-08-31 10:23:10 1216

原创 c++ lambda

而一个使用了成员变量的类的 operator(),如果能直接被转换为普通的函数指针,那么 lambda 表达式本身的 this 指针就丢失掉了。但是函数内部想修改这变量,但是又不想影响lambda表达式外面的值的时候,就直接添加mutable属性,这样调用lambda表达式的时候,会像函数传递参数一样,在内部定义一个变量并拷贝这个值。如果用[this]、[=]或[&]捕获了,那么线程将运行未定义的行为,因为在传递给线程的lambda中打印name时,lambda将使用已销毁对象的成员。

2023-08-30 13:25:34 632

原创 c++ boost::json

Boost社区12月11日发布了1.75版本,在之前,​​Boost使用Boost.PropertyTree解析​​JSON​​​,​​XML​​​,​​INI​​​和​​INFO​​​格式的文件。但是由于成文较早及需要兼容其他的数据格式,相比较于其他的​​C++​​解析库,使用时不方便。​Boost.JSON​​​相对于​​Boost.PropertyTree​​​来所,其只能支持​​JSON​​格式的解析,但是其使用方法更为简便,直接。

2023-08-29 16:52:29 550

原创 KalmanFilter卡尔曼滤波

xk​Axk−1​Buk−1​wk−1​其中n维向量xk​为k时刻的系统状态变量,n维向量xk−1​是k-1时刻的系统状态变量。A是状态转移矩阵或者过程增益矩阵,是n×n阶方阵,它将k-1时刻状态和当前的k时刻状态联系起来。B是可选的控制输入u∈Rl的增益,在大多数实际情况下并没有控制增益,所以Buk−1​这一项很愉快的变成零了。wk−1​。

2023-08-28 17:20:32 69

原创 c++ future与promise

C++11中promise和future机制是用于并发编程的一种解决方案,用于在不同线程完成数据传递(异步操作)

2023-08-28 14:08:21 195

原创 c++ std::ref

对于函数式编程(如 std::bind),是对参数直接拷贝,而不是引用,std::ref的引入就是为了解决一些传参问题ref是个函数模板,用来构建一个reference_wrapper对象并返回,该对象拥有传入的elem变量的引用。如果参数本身是一个reference_wrapper类型的对象,则创建该对象的一个副本,并返回。

2023-08-28 13:10:55 406

原创 C++ Pimpl

Pimpl(Pointer to implementation,指向实现的指针) 是一种减少代码依赖和编译时间的C++编程技巧,其基本思想是将一个外部可见类(visible class)的实现细节(一般是所有私有的非虚成员)放在一个单独的实现类(implementation class)中,而在可见类中通过一个私有指针来间接访问该实现类。C++虽然不太常提到设计模式,但是对外接口和实现细节的分离仍然是必须的。

2023-08-25 16:43:58 174

原创 c++ define,typedef,using

define 是宏定义命令,宏定义就是将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替,是预编译命令,因此会在预编译阶段被执行“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。11;C++语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。#define 宏名。

2023-08-25 10:51:34 187

原创 boost::container

Boost.Container 提供与标准库相同的容器,专注于额外的灵活性。例如,这个库中的所有容器都可以在共享内存中与 Boost.Interprocess 一起使用——这对于标准库中的容器并不总是可行。boost::container::stable_vector,其行为类似于 std::vector,即使元素没有彼此相邻存储在内存中,仍然可以使用索引访问元素。Boost.Container 明确支持递归容器。标准库定义的容器是否可以递归使用取决于实现。Boost.Container 的递归容器。

2023-08-24 16:04:42 191

原创 folly::DynamicBoundedQueue

消费者消费了记录释放了空间,增加credit,意思是信用,而生产者要入队列,消耗了空间,增加的是debit,意思是借款,然后又转移到transfer里,消费者如果发现credit超出限额可以从transfer中取一些。这个动态队列因为内部是一个无界队列,不是固定的空间,所以比定长队列可以节省空间。最大容量较小,可用定长的MPMCQueue;队列元素有权重,默认为1;容量可调整,作为队列平衡了生产者消费者的不平衡。还可防止死锁,将容量增加到生产者不需等待的大小。通过队列元素的增减,管理内存的扩张与缩减。

2023-08-24 15:37:24 81

原创 c++ Google gflags

例如,在foo.cc 定义了一个 gflags 变量 DEFINE_string(name, ‘bob’, ‘’),在 foo.h 中声明 DECLARE_string(name),然后在使用该变量的文件中 include “foo.h” 就可以。SetVersionString() 和 SetUsageMessage() 一定要在 ParseCommandLineFlags() 之前设定。访问在另一个文件定义的 gflags 变量,使用 DECLARE_,它的作用就相当于用 extern 声明变量。

2023-08-24 11:26:39 190

原创 点与线段的关系

若把cos放到等式左侧,这个运算也可以理解为:在点乘运算中,b向量投影到a向量上(或a向量投影到b向量上,两者相同),然后通过除以它们的标量长度来“标准化”。这个值一定是小于等于1的,可以转化为一个角度值。向量a和向量b的叉积是一个向量,而不是一个标量。有一点P和线段AB,已知点P的坐标和线段两个端点(A点和B点)的坐标。向量的叉乘,又叫向量积、叉积。可以使用向量法求解以上问题。

2023-08-22 13:55:06 168

空空如也

空空如也

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

TA关注的人

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