- 博客(137)
- 收藏
- 关注
原创 Linux安装微信wechat
4.grub启动显示条目异常,apt update & upgrade失败,还有软件和更新无法打开等情况。1.使用终端命令行安装软件源。2.使用终端命令行安装微信。执行成功以后,使用以下命令。
2024-06-27 09:18:14
17186
6
原创 字符串匹配
因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP写过KMP,一定都写过next数组,next数组就是一个前缀表,前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。例子:文本串:aabaabaafa 中查找是否出现过一个模式串:aabaaf可以看出,文本串中第六个字符b和模式串的第六个字符f,不匹配了。如果暴力匹配,会发现不匹配,此时就要从头匹配了。
2024-01-04 13:38:45
1205
2
原创 PaddlePaddle初使用
*注意:**如果是在自己的数据集上训练的模型,并且调整了中文字符的字典文件,请注意修改配置文件中的character_dict_path为自定义字典文件。如果训练时修改了文本的字典,在使用inference模型预测时,需要通过–rec_char_dict_path指定使用的字典路径。
2024-01-03 13:19:53
1149
原创 高斯矩阵相乘
如图所示绿色和红色分别代表两个独立的高斯分布函数,蓝色为两个分布的乘积,从蓝色形状可以粗略的看出乘积结果可能为一个幅值被压缩的高斯分布,其期望在。两个高斯分布相乘的分布函数即推导出来,即相乘后的分布函数为一个被压缩或者放大的高斯分布,为缩放因子,相乘后的概率密度的积分不等于1,但其方差和均值性质不变,所以。平时我们大多数情况下会看到情况①,那什么情况下才能出现情况②呢?只有一个交点时,即是一个情况②可能出现的临界,(这个临界。,也就是我们常说两个高斯分布相乘同样服从高斯分布。我们手动仿真了一些情况,如下。
2024-01-02 13:22:20
1190
原创 旋转矩形问题
矩形的坐标是旋转前的坐标:矩形A(left1,top1,width1,height1,angle1)矩形B(left2,top2,width2,height2,angle2)
2023-12-29 14:33:27
1340
原创 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
503
原创 CMake初始用
CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,符号"#"后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。
2023-12-19 13:26:24
905
原创 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
696
原创 C++ 多态
多态性(polymorphism)可以简单地概括为“一个接口,多种方法”,多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。C++运行时多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(Override),或者称为重写。多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,地址是早绑定的。
2023-11-06 16:34:40
166
原创 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
557
原创 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
2305
1
原创 c++ fmt
fmt 是一个文本格式库,可以代替 C 的 stdio 和 C++ iostreams。实现了 C++20 的 std::format 标准。
2023-10-09 09:56:57
482
原创 c++ 智能指针
C++中的一个常见的错误就是。大部分情形中,这些bug来自动态分配内存和指针的使用:当多次释放动态分配的内存时,可能会导致内存损坏或者致命的运行时错误;当忘记释放动态分配的内存时,会导致内存泄露。智能指针可以帮助管理动态分配的内存。其来源于一个事实:栈比堆要安全的多,因为栈上的变量离开作用域后,会自动销毁并清理。智能指针结合了栈上变量的安全性和堆上变量的灵活性。申请了一份动态内存,使用之后释放了它。但是很容易会在函数结束前释放它,有一些原因会导致内存无法得到释放,比如函数提前终止。
2023-09-28 15:47:20
143
原创 c++ chrono
chrono是一个time library, 源于boost,现在是C++标准使用时,需要导入chrono,其所有实现均在std::chrono namespace下。chrono是一个模版库,使用简单,功能强大,有三个重要概念:duration、time_point、clock。
2023-09-26 14:23:02
433
原创 c++ std::reference_wrapper
reference_wrapper是一个模板类用类型T实例化的reference_wrapper类能包装该类型的一个对象,并产生一个reference_wrapper< T >类型的对象,该对象就像是一个引用,与普通引用最大的不同是:该引用可以拷贝或赋值。特点:没有默认构造函数,可以用一个想要引用的对象构造,或者用另一个reference_wrapper对象构造。
2023-09-26 13:42:46
330
原创 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
1319
原创 c++ decltype
decltype 是“declare type”的缩写,译为“声明类型”。C++11 新增的一个关键字,和 auto 的功能一样,都用来在编译时期进行自动类型推导。
2023-09-20 14:02:05
411
原创 c++ vector
(1)默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。(2)两种方式等价 ,list2 初始化为list 的拷贝,list必须与list2 类型相同,也就是同为int的vector类型,list2将具有和list相同的容量和元素。
2023-09-19 13:34:17
503
原创 c++ static
静态在一个类中意味着特定的东西。这意味着在类的所有实例中,这个变量只有一个实例。如果某个实例改变了这个静态变量,它会在所有实例中反映这个变化。静态方法也是一样,无法访问类的实例。静态方法不需要通过类的实例就可以被调用。
2023-09-08 10:55:23
178
原创 c++ noexcept
一个 std::vector,若要进行 reserve 操作,一个可能的情况是,需要重新分配内存,并把之前原有的数据拷贝(copy)过去,但如果 T 的移动构造函数是 noexcept 的,则可以移动(move)过去,大大地提高了效率。在为某个异常进行栈展开的时候,会依次调用当前作用域下每个局部对象的析构函数,如果这个时候析构函数又抛出自己的未经处理的另一个异常,将会导致 std::terminate。需要注意的是,编译器不会检查带有 noexcept 说明符的函数是否有 throw。
2023-09-06 15:52:19
291
原创 c++ 回调函数,std::function,std::bind
定义回调函数的指针类型,包括返回值类型、(*类型名)函数指针、参数表回调函数的使用者函数符合函数指针类型的实现函数实现函数的类型必须要和函数指针的类型声明一致,也就是返回值和参数表(个数、类型)要完全一致。
2023-09-05 14:58:36
697
原创 git使用
误删除本地.git文件夹,可以重新建立连接。将已有的repository上传到git。创建一个新的repository。删除远程git仓库的文件/文件夹。设置global config。将已有的文件上传到git。
2023-09-04 15:38:21
537
原创 c++ folly::baton
Baton 通常用作线程间同步、等待、通知的标识符号,常用姿势是,一些线程调用 wait() 方法等待另一些线程完成某项工作,其完成以后调用 post() 方法进行通知。其跟一般PV信号量的区别是,Baton更轻量化、通知策略更简单(没有FILO/FIFO等策略)、仅能够通知一次,在简单场景中更高效。
2023-09-01 13:34:12
702
原创 c++ expected
和std::optional差不多,但是std::optional只能表示有正常的值或者为std::nullopt,即空值。而std::expected则可以表示一个期望的值和一个错误的值,相当于两个成员的std::variant,但是在接口上更方便使用。可以把它当作新的一种的错误处理方式。
2023-08-31 11:12:07
750
原创 pkg-config
编译配置的时候,需要依赖的库不一定都在 /usr/local/include 目录下,大部分情况下需要对编译器手动指定 include 目录,同理也可能需要对链接器手动指定 lib 所在目录,而由于不同系统下安装的库所在的目录不一定一致,会导致编译配置难以跨平台执行,可以用 pkg-config 来解决这个问题。
2023-08-31 10:23:10
1942
原创 c++ lambda
而一个使用了成员变量的类的 operator(),如果能直接被转换为普通的函数指针,那么 lambda 表达式本身的 this 指针就丢失掉了。但是函数内部想修改这变量,但是又不想影响lambda表达式外面的值的时候,就直接添加mutable属性,这样调用lambda表达式的时候,会像函数传递参数一样,在内部定义一个变量并拷贝这个值。如果用[this]、[=]或[&]捕获了,那么线程将运行未定义的行为,因为在传递给线程的lambda中打印name时,lambda将使用已销毁对象的成员。
2023-08-30 13:25:34
3602
原创 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
1419
原创 KalmanFilter卡尔曼滤波
xkAxk−1Buk−1wk−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
112
原创 c++ future与promise
C++11中promise和future机制是用于并发编程的一种解决方案,用于在不同线程完成数据传递(异步操作)
2023-08-28 14:08:21
319
原创 c++ std::ref
对于函数式编程(如 std::bind),是对参数直接拷贝,而不是引用,std::ref的引入就是为了解决一些传参问题ref是个函数模板,用来构建一个reference_wrapper对象并返回,该对象拥有传入的elem变量的引用。如果参数本身是一个reference_wrapper类型的对象,则创建该对象的一个副本,并返回。
2023-08-28 13:10:55
492
原创 C++ Pimpl
Pimpl(Pointer to implementation,指向实现的指针) 是一种减少代码依赖和编译时间的C++编程技巧,其基本思想是将一个外部可见类(visible class)的实现细节(一般是所有私有的非虚成员)放在一个单独的实现类(implementation class)中,而在可见类中通过一个私有指针来间接访问该实现类。C++虽然不太常提到设计模式,但是对外接口和实现细节的分离仍然是必须的。
2023-08-25 16:43:58
251
原创 c++ define,typedef,using
define 是宏定义命令,宏定义就是将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替,是预编译命令,因此会在预编译阶段被执行“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。11;C++语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。#define 宏名。
2023-08-25 10:51:34
286
原创 boost::container
Boost.Container 提供与标准库相同的容器,专注于额外的灵活性。例如,这个库中的所有容器都可以在共享内存中与 Boost.Interprocess 一起使用——这对于标准库中的容器并不总是可行。boost::container::stable_vector,其行为类似于 std::vector,即使元素没有彼此相邻存储在内存中,仍然可以使用索引访问元素。Boost.Container 明确支持递归容器。标准库定义的容器是否可以递归使用取决于实现。Boost.Container 的递归容器。
2023-08-24 16:04:42
471
原创 folly::DynamicBoundedQueue
消费者消费了记录释放了空间,增加credit,意思是信用,而生产者要入队列,消耗了空间,增加的是debit,意思是借款,然后又转移到transfer里,消费者如果发现credit超出限额可以从transfer中取一些。这个动态队列因为内部是一个无界队列,不是固定的空间,所以比定长队列可以节省空间。最大容量较小,可用定长的MPMCQueue;队列元素有权重,默认为1;容量可调整,作为队列平衡了生产者消费者的不平衡。还可防止死锁,将容量增加到生产者不需等待的大小。通过队列元素的增减,管理内存的扩张与缩减。
2023-08-24 15:37:24
254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人