C++
绿竹巷人
不想做算法工程师的算法工程师
展开
-
gflags简单应用
一些利用gflag的小代码参考文章。原创 2023-06-19 14:40:01 · 331 阅读 · 0 评论 -
C++ 读写二进制文件
C++来读取二进制文件二进制文件的格式可以多种多样,比如dat、index等,还可以是自行定义的格式。原创 2023-01-29 15:01:08 · 4526 阅读 · 0 评论 -
CUDA工程的CMakeLists.txt
需要CUDA库的工程,其CMakeLists.txt需要额外增加的代码。原创 2022-11-03 16:55:27 · 392 阅读 · 0 评论 -
一文搞定CMakeLists编写与库配置
CMakeLists文件学习原创 2022-11-03 16:19:11 · 2751 阅读 · 6 评论 -
C++的一些笔记(一)
最近的一点C++小工具技巧总结。原创 2022-09-27 18:08:00 · 318 阅读 · 0 评论 -
error: ‘make_shared’ is not a member of ‘boost’
编译一个以PCL库为主的工程时,出现了指针的相关错误。原创 2022-08-19 10:12:56 · 1143 阅读 · 0 评论 -
Opencv画椭圆及扇形
根据参数不同,自行调整画椭圆及扇形原创 2022-08-08 18:36:12 · 1734 阅读 · 5 评论 -
Opencv按键暂停
Opencv按键暂停原创 2022-07-26 16:13:48 · 478 阅读 · 0 评论 -
std::vector初始化及传参
C++ vector原创 2022-07-14 18:13:59 · 957 阅读 · 2 评论 -
求三角形是否重叠
描述碰到一道算法题,把我写的代码记录在这里代码#include <stdio.h>#include <opencv2/opencv.hpp>#include <vector>int min(int x, int y){ return x < y ? x : y;}int max(int x, int y){ return x > y ? x : y;}// 判断两条直线是否相交bool is_lines_cross原创 2022-05-01 17:00:10 · 485 阅读 · 0 评论 -
C++纯虚函数使用
描述C++纯虚函数的使用代码#include <iostream>class Base{public: Base(); ~Base(); virtual void test() = 0;};Base::Base(){}Base::~Base(){}class inheritance: public Base{public: inheritance(); ~inheritance(); void test() override;};inheri原创 2021-01-27 17:31:50 · 442 阅读 · 0 评论 -
C++ std::map使用emplace() std::piecewise_construct std::forward_as_tuple
描述C++11有关于std::map的一个用法例子涉及到了emplace()std::piecewise_constructstd::forward_as_tuple代码#include <map>#include <tuple>#include <iostream>int main(){ std::map<int,std::string> m; // uses pair's piecewise constructor原创 2021-01-22 15:39:30 · 1001 阅读 · 0 评论 -
C++ std::move
描述摘自https://www.cnblogs.com/yoyo-sincerely/p/8658075.html代码#include <iostream>#include <utility>#include <vector>#include <string>int main(){ std::string str = "Hello"; std::vector<std::string> v; //调用常规的拷贝原创 2021-01-21 10:23:56 · 102 阅读 · 0 评论 -
C++ namespace的使用示例
描述有关C++ namespace的例子代码#include <iostream>#include <string>#include <vector>namespace AAA{ class B { public: B(); ~B(); void output(); };}AAA::B::B(){}AAA::B::~B(){}void AAA::B::output(){ std::cout<<"exam原创 2021-01-19 11:41:38 · 228 阅读 · 0 评论 -
C++CamShift跟踪——加载一段视频并跟踪指定区域
描述有一段视频,通过离线的方式我知道要跟踪的部分在哪里。可以离线将要跟踪的部分的像素位置,输入到代码中,则播放视频时能够一直跟踪这个物体代码// Tracks the selected object using CAMShift algorithm#include "opencv2/video/tracking.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include原创 2020-12-10 16:07:52 · 253 阅读 · 0 评论 -
C++string查找子串并提取
描述有一个字符串,里面有各种内容,想要在其中查找固定内容的子串,并将子串提取出来代码#include <iostream>#include <string>std::string extract_value(std::string key, std::string buffer){ int key_start = buffer.find(key); int name_start = key_start + 6; std::string result =原创 2020-12-10 14:33:29 · 6042 阅读 · 0 评论 -
C++字符串string拼接
描述C++语言string类型的拼接代码#include <string>#include <iostream>int main(int argc, char** argv){ std::string a; a.append("123"); std::string b = "456"; a.append(b); std::cout<<a<<std::endl; return 1原创 2020-11-16 19:10:38 · 1009 阅读 · 0 评论 -
C++判断inf和Nan
描述一般来说,在写代码时突然出现bug,突然提示segmentation fault调试一下原因:我自己开发代码时,反正出现过好多次由于inf和nan带来的bug,所以在下面写一段代码来判断inf产生的一种情况: 1.0/0.0nan产生的一种情况:0.0/0.0这里不是失败代码的总结博客,因此不列举它们出现的原因,只列出屏蔽它们的方法代码#include <iostream>#include <math.h>int main(int argc, char** a原创 2020-11-02 12:03:58 · 1856 阅读 · 0 评论 -
同一电脑python与C++进程通信——读写txt文件
描述在同一电脑下,有一个python程序,还有一个C++程序。通过一种比较投机取巧的方法完成进程间通信。就是python和C++读写txt的方式代码python端import osimport timedef writePose(path, pose): with open(path, "w") as f: for i in range(6): f.write(str(pose[i])+"\n")def readPose(path): while(True): if os原创 2020-10-26 17:08:08 · 720 阅读 · 0 评论 -
C++语言的一些杂记
描述使用C++时的一些小技巧assertvoid readTxt(string file){ ifstream infile; infile.open(file.data()); //将文件流对象与文件连接起来 assert(infile.is_open()); //若失败,则输出错误消息,并终止程序运行 string s; while(getline(infile,s)) { cout<<s<<e原创 2020-10-26 14:44:58 · 79 阅读 · 0 评论 -
C++vector变量清空
描述假设我们定义了一个vector向量std::vector<double> m_xfor (int i = 0; i<10; i++){ m_x.push_back(i);}仍然想使用m_x,但想要清除向量中的全部数据代码m_x.clear();std::vector<double>(m_x).swap(m_x);原创 2020-10-20 10:10:16 · 1535 阅读 · 0 评论 -
C++获取时间戳
描述最近的项目代码里有一个小需求,我需要别人输入给我一个SLAM位置(或者随便什么位置),但是他的频率并不能满足我的计算需求。因此我需要在他不给我发信息时,我的线程仍在按照真实时间更新。库代码#include <string>#include <chrono>#include <iostream>double getTimeNow(){ std::chrono::system_clock::time_point current_time =原创 2020-09-11 15:43:30 · 1629 阅读 · 0 评论 -
C++Eigen库矩阵常见操作
描述使用C++语言的Eigen库进行一些常见操作代码头文件声明#include <Eigen/Dense>1. 矩阵声明n*n方阵(已知n)Eigen::Matrix2d m_matrix;m_matrix<< 2,3,2.2,1;std::cout << "m_matrix = \n"<< m_matrix<std::endl;注意矩阵里的值有2.2这个浮点型,因此定义Eigen::Matrix2i会出现问题(Matrix2原创 2020-08-17 11:57:36 · 17473 阅读 · 15 评论 -
C++在终端输入命令时传入参数
描述运行代码时,想通过终端命令传入参数举例子在Ubuntu终端下某一路径下,有一个可执行程序detectcd detect/./detect而我想执行两种不同的操作,使程序不用重新编译就能达到这一目的cd detect/./detect online ./detect offline代码你最开始学C++代码时每次都要写到的int main(int argc, char* argv[])就是干这事儿的代码if (argc > 1 && (strcmp(a原创 2020-08-04 19:42:35 · 3496 阅读 · 0 评论 -
Eigen矩阵colPivHouseholderQr().solve()求解Ax=b
描述使用eigen库求解Ax=b代码#include <Eigen/Dense>Eigen::Matrix2d A;A << 1,2, 4,5;Eigen::Vector2d b(3, 4);Eigen::Vector2d C = A.colPivHouseholderQr().solve(b);std::cout<<C<<std::endl;输出的结果是-2.33333 2.66667代码中的colPivHouseh原创 2020-07-30 22:35:37 · 9006 阅读 · 0 评论 -
弧度角归一化
描述在编写代码时,一般都是使用弧度角进行计算。弧度角可以是任意的,但作为工程处理来说,一般需要弧度角保持在 -π ~ π 之间代码实现方式是有很多的,这里贴出的是百度apollo代码中的实现方式#include <math.h>double NormalizeAngle(double angle) { double a = fmod(angle + M_PI, 2.0 * M_PI); if (a < 0.0) { a += (2.0 *原创 2020-07-30 15:41:52 · 2392 阅读 · 7 评论 -
C++opencv图像裁剪、等比例放大缩小、复制到指定区域
描述C++使用opencv时,对imshow图像进行的常见处理,包括图像剪裁、等比例压缩等(待继续补充)代码1. 剪裁int matrix_size = 3000;cv::Mat image(matrix_size, matrix_size, CV_8UC3, cv::Scalar(255, 255, 255)); // 原图cv::Mat image_part = image(cv::Rect(1400,1100,1000,1800)); // 裁剪后的图cv::imshow("part o原创 2020-07-05 16:58:58 · 19792 阅读 · 5 评论 -
C++队列
描述C++使用队列的一些简单示例。比较简单,先写到这个程度,有必要去深究接口std::queue<int> my_queue;my_queue.pop();my_queue.push();my_queue.empty();my_queue.size();my_queue.front();my_queue.back();具体用法可以看下面示例代码#include <queue>#include <iostream>int main(){原创 2020-06-30 20:06:29 · 406 阅读 · 0 评论 -
C++两组容器操作的区别:reserve()和resize()、emplace_back()和push_back()
描述C++执行容器(vector,map等)操作时,总有一些需求,比如说设置容器大小啊,增加元素啊。这里介绍两组写法的区别,设置容器大小的reserve()和resize()、添加元素的emplace_back()和push_back()1. reserve()和resize()这个比较简单。reserve()增加了vector的capacity,但是它的size没有改变resize()改变了vector的capacity,同时也增加了它的size!原因如下:reserve是容器预留空间原创 2020-06-30 14:46:18 · 2203 阅读 · 0 评论 -
互斥锁的相关知识及应用
描述在开发某段代码时,需要加互斥锁,这里进行相关知识的总结基础知识1. 原子性与原子操作原子性原子性是指一个操作是不可中断的。(这里有一个非我专业领域的名词, CPU指令集中常见的一个指令:CAS。它完成两个操作,一个比较,一个交换,后一个完不完成依赖于前一个操作的结果,从逻辑上说,它们是两个操作,可是它们特意被实现为不可打断的。这就是一个经典的原子指令)原子操作原子操作是指不会被线程调度机制打断的操作。这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换原创 2020-06-30 10:28:48 · 614 阅读 · 0 评论 -
C++ rapidjson库解析json串
描述我们有了一个string类型的字符串,字符串是一个json串,使用C++的rapidjson库解析它代码按照你的需求自行更改代码,我这里只是个例子string内容为{ "store": [ { "grid_corners":[0,1], "status":3 }, { "grid_corners":[5,6], "status":10 } ]}#include <iostream> #include <string.h&原创 2020-06-26 15:36:25 · 1403 阅读 · 0 评论 -
C++使用rapidjson生成json字符串
描述使用C++语言及腾讯开发的rapidjson库,生成json字符串代码rapidjson::Document jsonDoc; //生成一个dom元素Documentrapidjson::Document::AllocatorType &allocator = jsonDoc.GetAllocator(); //获取分配器jsonDoc.SetObject();jsonDoc.AddMember("full", 0, allocator);rapidjson::Value l原创 2020-06-20 16:23:15 · 2075 阅读 · 0 评论 -
二维点云ICP的C++实现
描述使用C++代码来实现二维点云ICP算法二维点云ICP原理推导特点说明:ICP算法中的loss计算方式,可以根据自己实际需要来调整。我这里使用的是,目标点云A中的某个点 a,从源点云 B 中找到距离点 a 最近的点 b,总的loss就是这些a-b距离之和正常的loss计算方式,应该是从源点云B中的每个点 b,去目标点云A里寻找最近点loss的定义方式一定要好好思考,结合自己的实际需要,不要只会把我下面的代码搬过去,因为可能不work代码这里我只提供一个ICP的api接口,是从我的一段代原创 2020-06-18 12:07:14 · 2246 阅读 · 4 评论 -
C++ vector求均值和方差
描述std::vector< double> 或者 std::vector< int> 类型变量求均值和方差均值Xˉ = ∑i =1NxiN\bar{X}\; =\; \frac{\sum_{i\; =1}^{N}{x_{i}}}{N}Xˉ=N∑i=1Nxi方差σ2 = ∑i =1N(xi−Xˉ)2N\sigma ^{2}\; =\; \frac{\sum_{i\; =1}^{N}{\left( x_{i}-\bar{X}\right)^{2}}}{原创 2020-05-28 10:53:06 · 4830 阅读 · 0 评论 -
C++寻找最大值最小值
描述各类型变量寻找最大值代码vector寻找最大值#include <algorithm>#include <iostream>int main(){ std::vector<double> v {1.0, 2.0, 3.0, 4.0, 5.0, 1.0, 2.0, 3.0, 4.0, 5.0}; std::vector<double>::iterator max = std::max_element(std::begin(v),原创 2020-05-18 14:33:18 · 1808 阅读 · 1 评论 -
C++变量出现nan和inf
描述nan: not a number 非数字inf : infinity 无穷大的数,一般是超过浮点数的表示范围。代码里出现这两个,得注意排除。常见原因,代码里有0其实以我之见,不用管它为啥出现,因为我们根本用不到nan和inf。学会把他们排除掉就好。代码使用isnan()isinf()如果是nan和inf会返回true,否则返回falseisnan(NaN) = tr...原创 2020-05-08 10:44:03 · 2172 阅读 · 0 评论 -
C++基本变量类型(int、double、string)相互转化
描述C++基本变量类型转化double转string#include<string>double d;std::string s=std::to_string(d);原创 2020-05-06 22:51:54 · 247 阅读 · 0 评论 -
C++中string截取和查找
描述C++有关string类型的几个常见操作头文件#include<string>1. 截取取字符串的前i个字符str=str.substring(0,i);去掉字符串的前i个字符str=str.substring(i); 从右边开始取i个字符str=str.substring(str.length()-i); str=str.substring...原创 2020-05-06 22:26:33 · 2835 阅读 · 0 评论 -
Mac下使用Boost通过程序与stm32通信
问题执行报错libc++abi.dylib: terminating with uncaught exception of type boost::wrapexcept<boost::system::system_error>: open: No such file or directoryAbort trap: 6原因:你要使用的串口,正在被另外一个程序占用解决方案:关掉...原创 2020-04-30 11:16:43 · 585 阅读 · 0 评论 -
C++读写文件并更改已知内容中的参数
描述当你需要更改某个.json或者.lua文件中的参数文件内容你是完全已知的,注意,是全部已知的那么你就可以使用下面的代码来更改了注意,这是一种投机取巧的办法,并不是通过配置lua环境来进行的参数更改,而是暴力重新覆盖文件的方式来更新参数。这种方法是有局限性的,也就是你要知道文件的全部内容,而且你要知道更改什么变量的参数。除了敏捷开发的需求外,我不建议使用这种方法。正确读取lua的方...原创 2020-04-20 23:01:39 · 1902 阅读 · 0 评论