![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 65
C++
给算法爸爸上香
爱学习的图像算法工程师一枚
展开
-
Makefile静态库动态库的构建和链接之工程实用篇
现有C++工程目录结构如下:add.hadd.cppmain.cpp。原创 2024-02-25 22:25:07 · 2489 阅读 · 0 评论 -
卡尔曼滤波(KF)和增广卡尔曼滤波(EKF)实现
【代码】卡尔曼滤波(KF)和增广卡尔曼滤波(EKF)实现。原创 2024-01-01 14:21:53 · 513 阅读 · 0 评论 -
e的快速幂算法
【代码】e的快速幂算法。原创 2023-09-28 22:42:30 · 106 阅读 · 0 评论 -
Python和C++使用的一些比较
说明在函数中修改list或者array的值会影响函数外原list或者原array的值,而修改int的值不会影响函数外原int的值。若把 a = [1, 2]换成a = (1, 2)则报错:‘tuple’ object does not support item assignment;换成a = {1, 2}则报错:‘set’ object is not subscriptable。说明在函数中修改vector的值不会影响函数外原vector的值。和Python的类似。报错:“a”: 未声明的标识符。原创 2023-07-08 10:19:49 · 282 阅读 · 0 评论 -
CMake静态库动态库的构建和链接之工程实用篇
在这里不再赘述。Windows平台下可用cmake-gui生成vs的.sln工程,Linux平台下可以运行cmake命令。原创 2023-07-05 00:11:44 · 10240 阅读 · 0 评论 -
C++11:其他特性
内存对齐,或者说字节对齐,是一个数据类型所能存放的内存地址的属性。这个属性是一个无符号整数,并且这个整数必须是2的N次方(1、2、4、8、…、1024、…)。当我们说一个数据类型的内存对齐为8时,就是指这个数据类型所定义出来的所有变量的内存地址都是8的倍数。当一个基本数据类型(Fundamental Types)的对齐属性和这个数据类型的大小相等时,这种对齐方式称为自然对齐(Naturally Aligned)。比如,一个4字节大小的 int型数据,在默认情况下它的字节对齐也是4。原创 2023-04-15 21:20:08 · 606 阅读 · 0 评论 -
C++11:便利的工具
time_point 表示一个时间点,用来获取从它的clock 的纪元开始所经过的duration(比如,可能是1970.1.1以来的时间间隔)和当前的时间,可以做一些时间的比较和算术运算,可以和ctime库结合起来显示时间。clocks表示当前的系统时钟,内部有time_point、duration、Rep、Period等信息,主要用来获取当前时间,以及实现time_t和 time _point的相互转换。steady_clock: 不能被“调整”的时钟,并不一定代表真实世界的挂钟时间。原创 2023-04-09 19:11:32 · 621 阅读 · 0 评论 -
C++11:多线程
在 std::future之上的高一层是std::packaged_task 和std::promise,它们内部都有 future 以便访问异步操作结果,std::packaged_task包装的是一个异步操作,而 std::promise包装的是一个值,都是为了方便异步操作,因为有时需要获取线程中的某个值,这时就用std::promise, 而有时需要获一个异步操作的返回值,这时就用std::packaged_task。std::future作为异步结果的传输通道,可以很方便地获取线程函数的返回值;原创 2023-04-03 00:31:57 · 371 阅读 · 0 评论 -
C++11:智能指针
智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保在离开指针所在作用域时,自动正确地销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数。每使用它一次,内部的引用计数加1,每析构一次,内部引用计数减1,减为0时,删除所指向的堆内存。C++11提供了3种智能指针: std:.shared_ptr、std::uniq _ptr和std::weak _ptr,使用时需要引用头文件,本章将分别介绍这3种智能指针。原创 2023-03-27 22:52:00 · 966 阅读 · 0 评论 -
C++11:改善程序性能
C++11中所有的值必属于左值、将亡值、纯右值三者之一。将亡值和纯右值都属于右值。区分表达式的左右值属性有一个简便方法:若可对表达式用&符取址,则为左值,否则为右值。在这条语句中,i是左值,0是字面量,就是右值。在上面的代码中,i可以被引用,0就不可以了。字面量都是右值。右值引用就是对一个右值进行引用的类型。因为右值不具名,所以我们只能通过引用的方式找到它。无论声明左值引用还是右值引用都必须立即进行初始化,因为引用类型本身并不拥有所绑定对象的内存,只是该对象的一个别名。原创 2023-03-22 23:16:11 · 241 阅读 · 0 评论 -
C++11:让程序更简洁
我们使用auto fr保存std::bind的返回结果,是因为我们并不关心std::bind真正的返回类型(实际上 std::bind的返回类型是一个stl内部定义的仿函数类型),只需要知道它是一个仿函数,可以直接赋值给一个std::function。从上面我们可以看到std::function 的使用方法,当我们给std:function填入合适的函数签名(即一个函数类型,只需要包括返回值和参数表)之后,它就变成了一个可以容纳所有这一类调用方式的“函数包装器”。通过前面的例子,已经知道了std:;原创 2023-03-17 18:00:26 · 773 阅读 · 0 评论 -
vector删除指定元素/重复元素/指定索引元素
【代码】vector删除指定元素/重复元素/指定索引元素。原创 2022-11-13 19:20:23 · 1481 阅读 · 0 评论 -
CMakeLists常用命令
这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.txt 文件中使用了一些高版本 cmake 特有的一些命令的时候,就需要加上这样一行,提醒用户升级到该版本之后再执行 cmake。这个命令不是强制性的,但最好都加上。它会引入两个变量 demo_BINARY_DIR 和 demo_SOURCE_DIR,同时,cmake 自动定义了两个等价的变量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。add_library 默认生成是静态库,通过以上原创 2022-11-11 22:33:58 · 604 阅读 · 0 评论 -
矩阵卷积C++实现
矩阵卷积原理:矩阵卷积运算的具体过程,很简单vector<vector<int>> matrix_mutiplication(const vector<vector<int>>& src, const vector<vector<int>>& kernel){ vector<vector<int>> dst(src.size() - kernel.size() + 1, vector<原创 2022-04-01 18:40:56 · 1491 阅读 · 0 评论 -
矩阵乘法C++实现
vector<vector<int>> convolution(const vector<vector<int>>& A,const vector<vector<int>>& B){ int A_row = A.size(), A_col = A[0].size(), B_row = B.size(), B_col = B[0].size(); assert(A_col == B_row); vector&l.原创 2022-04-01 18:35:32 · 1630 阅读 · 0 评论 -
利用std::sort将cv::Point和pcl::PointXYZ按自定义方式排序
自定义排序谓词sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。//对点的坐标按x从小到大排序,若x值相同则按y从小到大排序//bool compare(const cv::Point pt1, const cv::Point pt2){ if (pt1.x != pt2.x) return pt1.x < pt2.x;原创 2021-01-19 12:33:04 · 3424 阅读 · 3 评论