C++学习笔记
超爱吃小蛋糕的66
这个作者很懒,什么都没留下…
展开
-
C++使用OpenMP对简单for循环加速代码实例
发现对于简单的for循环,OpenMP简直是一大加速利器,两行代码就搞定。CMakeLists.txt文件。原创 2023-11-15 14:02:10 · 448 阅读 · 1 评论 -
CMake编译出现undefined reference to symbol ‘pthread_create@@GLIBC_2.2.5‘
undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'原创 2023-10-19 09:52:56 · 512 阅读 · 0 评论 -
[cmake报错]collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit statusCMakeFiles/orbslamTest.dir/build.make:142: recipe for target '../orbslamTest' failedmake[2]: *** [../orbslamTest] Error 1原创 2023-07-12 16:56:45 · 2096 阅读 · 0 评论 -
C++使用boost::serialization进行序列化
发现一个比较好玩的东西,boost::serialization序列化操作,简单来说感觉像ofstream和ifstream的升级版,Boost.Serialization 库能够将c++项目中的对象转换为一序列的比特(bytes),用来保存和加载还原对象。原创 2023-06-09 16:08:13 · 526 阅读 · 0 评论 -
记录一个cmake编译过程中的问题:fatal error: 3rdparty/DBoW2/DBoW2/FORB.h: No such file or directory
在进行cmake编译时出现了以下报错,提示找不到某个头文件但是在vscode中通过Ctrl+鼠标右键是可以成功跳转到对应的文件中去的,遂定位到CMakeLists.txt文件中.原创 2023-05-18 13:43:00 · 284 阅读 · 0 评论 -
C++函数的按值传递参数和按引用传递参数
对于C++函数,传参时可以按值传递参数和按引用传递参数,对于比较庞大的数据结构或者类对象使用按值传递会产生昂贵的拷贝成本,这时可以是用按引用传递,如果不希望改变传递的变量,可以使用按const引用传递原创 2023-05-16 15:10:34 · 95 阅读 · 0 评论 -
使用ceres库时报错:undefined reference to `ceres::Problem::Problem()‘
myCeres.cpp:(.text.startup+0x247): undefined reference to `ceres::Problem::Problem()'myCeres.cpp:(.text.startup+0x2aa): undefined reference to `ceres::CostFunction::CostFunction()'myCeres.cpp:(.text.startup+0x31d): undefined reference to `ceres::Problem:原创 2023-04-10 17:09:17 · 1062 阅读 · 0 评论 -
leetcode-hot100-simple刷题备忘
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。主要思想:利用哈希表的键值对特性,将元素-索引组合成键值对,遍历一遍数组,对于每个元素在哈希表中寻找是否存在一个键和当前元素的和为target,如果存在直接返回这两个元素的索引,如果不存在则将该值加入到哈希表中。原创 2023-03-12 18:17:32 · 39 阅读 · 0 评论 -
Cmake查找所有指定cpp文件并进行编译
学一招,在编译ORB-SLAM3时,中搞了一大堆cpp文件,这里设置一下,让CMake自己查找制定目录所有的cpp文件,看上去简洁很多。原创 2022-07-07 17:12:52 · 4666 阅读 · 0 评论 -
记录vector中resize()函数的功能
【代码】记录vector中resize()函数的功能。原创 2022-11-07 16:00:04 · 315 阅读 · 2 评论 -
C++计算程序运行时间
C++计算程序运行时间原创 2022-11-04 10:08:22 · 296 阅读 · 0 评论 -
使用map自动排序的特性获取最大值最小值以及key值对应的value
map在插入键值对时会按照key值从小到大自动排序,现在需要获取最大key对应的value;或者最小key对应的value最大key对应的value即map最后一组数据,使用迭代器iterator或者反向迭代器获取最小key对应的value即map第一组数据原创 2022-11-02 09:56:36 · 1785 阅读 · 0 评论 -
C++使用std::to_string和std::stod()实现数字和字符串之间的相互转换
C++使用std::to_string和std::stod()实现数字和字符串之间的相互转换原创 2022-11-02 09:27:13 · 769 阅读 · 0 评论 -
fatal error: pcl_conversions/pcl_conversions.h: No such file or directory
在进行`catkin_make`编译时老是遇到`fatal error: pcl_conversions/pcl_conversions.h: No such file or directory`原创 2022-10-24 10:17:35 · 2134 阅读 · 0 评论 -
C++实现将图像数据转为ROSBAG
前提:已知一组图片和记录该图像路径的txt文件.通过ros::rosbag将指定的一组图像转换成bag的形式原创 2022-10-20 13:33:54 · 515 阅读 · 0 评论 -
备份:C++读取指定目录下的文件重命名后另存为
某批图像中的名字同时包含了时间戳和其他前缀,想要批量进行处理,图像名称只保留时间戳。原创 2022-10-20 09:42:06 · 677 阅读 · 0 评论 -
使用yaml-cpp时遇到的问题:YAML::BadFile和YAML::ParserException
terminate called after throwing an instance of 'YAML::BadFile' what(): bad file: /home/lusx/Demos/ORB-SLAM3/avp_ws/src/geely.yamlAborted (core dumped)原创 2022-06-24 13:23:21 · 4568 阅读 · 1 评论 -
‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
在编译时提示找不到opencv相关标志:‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scopeCV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope‘CV_MINMAX’ was not declared in this scope原因是作者代码使用的opencv版本是3.x,而自己默认的opencv版本是4.4.0,在新版本中相关的定义已经发生了变化,解决办法有两个:方法一:碰巧自原创 2022-05-25 10:21:10 · 5043 阅读 · 4 评论 -
在本地的README.MD文件中插入图片
在离线的readme.md文件中加入下面语法:![Alt](YOUR_PATH/1.png)YOUR_PATH为图片路径,可以是相对的也可以是绝对的。原创 2022-05-23 10:19:40 · 1056 阅读 · 0 评论 -
编译的动态库忘了链接第三方库引发的报错
记录一个犯的有点傻的小问题,最近需要把项目中一部分不想对外开放的代码提取出来封装成动态库给第三方调用,在编译时代码部分没有问题,但是出现了编译报错:libslamBase.so: undefined reference to gtsam::_multirobotKeyFormatter[abi:cxx11](unsigned long)' 检查了一下库文件的代码,也引用了gtsam相关的头文件,咋还出现了未定义的引用呢,,,后来看了一下CMakeLists.txt,原来是我自己的库文件libslam原创 2022-05-16 14:22:04 · 569 阅读 · 0 评论 -
x86与Xavier aarch64交叉编译简单实现
文章目录说明安装交叉编译工具链使用交叉编译工具链在x86环境下编译aarch64架构下的应用软件程序使用CMake进行编译参考链接说明编译平台:x86 ubuntu16.04应用平台:xavier arm aarch64本笔记旨在记录如何进行交叉编译,在x86 Ubuntu1604系统上编译出Xavier平台(架构为aarch64)下的应用软件。安装交叉编译工具链交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的GC原创 2022-02-09 16:37:13 · 2073 阅读 · 0 评论 -
Linux系统改变在终端输出文本的颜色
**简单的说就是ESC[m,ESC的八进制为\033,可以是多个属性的组合,用分号隔开。例:#includeint main(){ printf("\033[31mThis is RED.\n\033[0m"); return 0;}31m代表字体为红色,0m代表关闭所有属性。常用的ANSI控制码如下(有些不支持):\033[0m 关闭所有属性\033[1m 高亮\033[2m 亮度减半\033[3m 斜体\033[4m 下划线\033[5m 闪烁\033[6m转载 2021-07-20 19:23:12 · 321 阅读 · 0 评论 -
使用gdb调试C++程序
记录一下搜索到的相关链接,再进行整理和学习。[1]https://www.cnblogs.com/gaopang/p/11588683.html[2]https://blog.csdn.net/u013171226/article/details/109241119[3]https://blog.csdn.net/u013171226/article/details/109806685?ops_request_misc=%257B%2522request%255Fid%2522%253A%252216原创 2022-01-06 17:25:30 · 1706 阅读 · 0 评论 -
将uint8_t类型的16进制字符转化转换为string字符串
碰到一个需求,需要把硬件读到的uint8_t类型的16进制数据转化为string类型的字符串。例如,如果读到到的数据是一个uint8_t类型的数组uint8_t code=[5]={0XAA, 0X01, 0XE3, 0X23, 0X34},需要将其转换为string类型字符串"AA01E32334"当时考虑到的两个思路:将code先转换为char字符串数组,再转化为string字符串遍历code的每一个元素,把每一个元素通过std::to_string转化为string类型的字符子串,然后把所有原创 2021-12-28 14:28:53 · 12021 阅读 · 0 评论 -
string的常见用法
文章目录1.声明和初始化2.string的插入、查找、删除、修改3.比较两个字符串4.返回子串5.string与字符串数组之间的转换6.其他操作参考链接1.声明和初始化string s;//声明一个字符串string s1 = "hello,world";//使用字符串初始化char chs1[20] = "hello,world";//使用字符串初始化string s1_2 = string(chs1);string s2(s1);//使用s1初始化s2string s3 = s1;//转载 2021-12-27 17:11:07 · 512 阅读 · 0 评论 -
STL容器之map的常见操作
文章目录1声明和初始化2.插入,insert()函数3.删除4.查找和取值5.遍历7.释放资源1声明和初始化C++中map提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值。//map<T1,T2>//1.1声明map<int, string> mm_name;//1.2通过赋值对mm_name初始化,元素之间用逗号隔开mm_name = {{1,"name1原创 2021-12-24 20:44:43 · 835 阅读 · 0 评论 -
回调函数的原理、为什么使用回调函数
文章目录1. 什么是回调函数2. 为什么使用回调函数3. 怎么使用回调函数让代码结构更加合理在看代码时遇到回调函数,从代码上看其实就是对函数指针的应用,但是不太明白使用回调函数对整个代码结构有什么意义?为什么不直接调用函数接口实现相关功能呢?看了一些资料,结合代码先做一个小小的总结原创 2021-12-17 17:58:48 · 748 阅读 · 0 评论 -
STL容器之vector的一些常见操作
文章目录1初始化2.插入2.1 push_back()函数2.2 insert()函数3.删除4.修改5.查找6.遍历7.排序8.求最大值最小值1初始化//1.声明一个int类型的vectorvector<int> v1;//2.声明一个int类型长度为5的vectorvector<int> v2(5);//3.声明一个int类型长度为5的vector,并将其全部初始化为0vector<int> v3(5, 0);//4.用现有容器初始化一个vector原创 2021-12-17 12:35:33 · 387 阅读 · 0 评论 -
memset()函数及其简单用法
函数原型://复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符,c一般为0void *memset(void *str, int c, size_t n)作用:定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。对于数组或者结构体的初始化可以通过memset函数实现。为新申请的内存进行初始化工作清空一个结构类型的变量或数组代码示例#include "stda原创 2021-12-14 13:50:07 · 1045 阅读 · 0 评论 -
vector类型的数组
发现了一个很有意思的东西——vector数组,记录一下看代码时一开始把vector数组当做了一个vector向量,看到v_test[0].size()时十分迷惑,想着这也不是二维向量啊,怎么他的元素还能.size(),仔细一看竟然是个vector类型的向量。看来基本数据类型和数据结构还是不到家。。。简单代码示例#include "stdafx.h"#include <iostream>#include <vector>using namespace std;int原创 2021-12-14 09:21:38 · 1278 阅读 · 0 评论 -
C/C++中memcpy()函数用法
描述: 从存储区 str2 复制 n 个字节到存储区 str1。函数原型/********************************* 输入:* str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。* str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。* n -- 要被复制的字节数。********************************/void *memcpy(void *str1, const void *str2, si原创 2021-12-09 11:01:08 · 1034 阅读 · 0 评论 -
string::append函数用法
在str字符串的末尾添加字符串string& append (const string& str, size_t subpos, size_t sublen);//如果只有索引subpos,则添加从subpos开始的后面所有字符string& append (const char* s, size_t subpos, size_t sublen);在字符串的的末尾添加str字符串中索引为(index, index+n)的子串string& append (c.原创 2021-12-06 09:30:59 · 4343 阅读 · 0 评论 -
使用C/C++提供的宏__FUNCTION__,__FILE__和__LINE__帮助定位程序运行错误
C/C++提供了三个宏__FUNCTION__,__FILE__和__LINE__来定位程序运行时的错误。程序预编译时预编译器将用所在的函数名,文件名和行号替换。当运行时错误产生后这三个宏分别能返回错误所在的函数,所在的文件名和所在的行号。示例代码//mian.cpp#include"test1.h"int main(){ log_print; test1(); cout<<"Hello C++."<<endl; log_print; return 0;}原创 2021-10-26 11:11:13 · 239 阅读 · 0 评论 -
C++使用指定Makefile文件进行编译
如果在同一目录下存在多个Makefile文件,或者使用其他目录下的Makefile文件,可以使用“make -f xxx-Makeflie”原创 2021-10-26 10:42:34 · 608 阅读 · 0 评论 -
C++在Linux系统上输出本地时间
1、获取本地时间,精确到毫秒级2、将获取的时间在窗口上进行显示,制作一个简易的电子时钟。原创 2021-08-08 00:56:02 · 639 阅读 · 0 评论 -
计算两个日期的相对时间
输入两个日期,计算两个日期之间的绝对天数原创 2021-08-07 22:59:30 · 285 阅读 · 0 评论 -
C++中的exit函数
**描述:**用来立即中止当前程序的执行,并将一个整数返回给系统,该整数的作用与“由mian函数返回的整数”相同,如果是0表示程序正常退出;如果非0表示程序异常退出。头文件#include<cstdlib>使用exit(0);//程序正常退出exit(1)//程序异常退出...原创 2021-08-07 22:30:05 · 6959 阅读 · 3 评论 -
对数值四舍五入、保留小数点最后两位——floor函数
描述:1、实现对一个数值进行四舍五入取整2、保留数值小数点最后两位floor函数功能:返回一个小于传入参数的最大整数头文件#include<cmath>函数原型double floor (double x ); float floor (float x ); long double floor (long double x ); 示例代码...原创 2021-08-05 21:50:08 · 1484 阅读 · 1 评论 -
代码工程的创建——文件目录结构、变量的外部链接、名称空间
1.创建代码工程(1)所包含的文件目录:src:用于储存源代码文件include:用于储存头文件bin:用于储存生成的可执行文件lib:用于储存生成的库文件build:用于储存编译生成的中间文件data:用于储存程序需要调用的文本、视频、图片等文件CMakeLists.txt:用于书写cmake编译规则(2)头文件的编写1)头文件中一般可以包含的内容-函数原型-使用#define或const定义的符号常量-结构声明-类声明-模板函数-内联函数2)头文件管理使用#ifnd原创 2021-07-25 23:28:04 · 756 阅读 · 0 评论 -
函数(一)——函数对数组、结构的调用
1.函数与数组函数使用数组名作为参数时,实际上传递的时数组第一个元素的地址,因为在访问数组中的元素时,数组名和指针之间起着等效的作用,因此可以通过以下3种方式在函数中传递数组。(1)函数使用数组名作为作为形参(2)函数使用指针指向的地址作为形参(3)函数访问数组中某段区间的元素注:函数无法返回数组,但可以返回指向数组的指针const int Asize=10;//函数使用数组名作为作为形参void useArray(int arr0[],int n);//函数使用指针指向的地址作为形参v原创 2021-07-20 22:15:46 · 2144 阅读 · 0 评论