
C++
文章平均质量分 69
一叶执念
这个作者很懒,什么都没留下…
展开
-
ROS中不同文件之间的引用小结
在比较大的一些程序中,往往会涉及到一些不同模块的调用,如果这些东西放在一个.cpp文件内,这个文件会变的特别长,因此会使用多个文件互相引用。那么如何在ROS下进行这种不同文件下的引用呢,根据最近所学,简单记录一份笔记。原创 2024-07-08 20:18:40 · 962 阅读 · 0 评论 -
std::shared_ptr与std::make_unique在类函数中的使用
在最近学习cartographer算法的时候,发现源码中大量的使用了std::shared_ptr与std::make_unique,对于这些东西之前不是很了解,为了更好的理解源代码,因此简单学习了一下这块内容的使用,在这里简单记个笔记。原创 2024-03-21 23:02:07 · 1148 阅读 · 0 评论 -
ROS的pluginlib学习总结一
在开发中需要使用到插件,因此学习了下pluginlib的一些使用,学习的还不够透彻,先记录一下这几天的学习结果。关于ROS中pluginlib的使用主要参考的是《》与《》这两篇文章。第一篇中讲述了一个示例,第二篇是ROS官方中对于pluginlib使用的一些解释的翻译。原创 2024-02-25 23:18:01 · 1190 阅读 · 0 评论 -
Ceres安装与卸载以及新旧版本中的问题
Ceres在SLAM优化中常常会用到,简单记录一下关于Ceres的一些问题。原创 2023-01-30 21:45:00 · 6694 阅读 · 0 评论 -
std::map使用方式以及注意事项(关于相同key的问题)
std::map的使用在C++开发中也是经常会用到的一些东西,这里进行一些简单的使用记录,包括如何插入、删除以及修改等。原创 2022-12-31 21:42:41 · 7353 阅读 · 0 评论 -
C++ 读、写、改、删除本地文件内容
在写程序的过程中,有时候需要对程序中的一些参数或者变量在本地读取、存储以及修改等,因此掌握一下C++对于本地文件的一些操作还是挺有必要的。原创 2022-12-22 09:09:55 · 12283 阅读 · 0 评论 -
ROS学习之C++读取txt点云并在rviz中显示
C++读取txt点云并在rviz中显示原创 2022-08-19 21:34:46 · 1735 阅读 · 1 评论 -
C++ tf::TransformListener
ROS编写机器人的时候,不免会用到坐标变换,而TF是ROS中建立坐标系,并且使用各个坐标间转换关系的一个很好的工具。TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系下的坐标。使用TF功能包主要有以下两种方式:A:监听tf变换,接收并缓存系统中发布的所有参考系变换,并从中查询所需要的参考系变换。 B:广播tf变换,向系统中广播参考系之间的坐标变换关系。系统中更可能会存在多个不同部分的tf变换广播,每个广播都可以原创 2022-04-30 10:32:27 · 5905 阅读 · 0 评论 -
ROS订阅激光点云数据并画直线
最近遇到一个点云处理的问题,需要将激光点云拟合出几条直线最后在rviz中显示出来。主要用到了点云数据的订阅、坐标变换、直线检测以及rviz显示其实还是挺简单的,就是需要用到的一些东西/工具需要提前了解一下.cv::approxPolyDP首先第一个是opencv库中的点云到直线拟合工具cv::approxPolyDP,这个工具箱还是很好用的,它的输入是点云数据,输出是拟合出来的直线的起点与终点坐标。void approxPolyDP(InputArray curve, OutputArray appr原创 2022-04-22 19:59:32 · 5563 阅读 · 12 评论 -
C++ 爬楼梯
题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶这道题一开始看感觉挺难的,但是后面自己拿笔列一下就很简单了。输入:原创 2021-12-06 18:08:02 · 2695 阅读 · 0 评论 -
C++ 实现Sqrt(x)
题目:给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。解题方法一:class Solution {public: int mySqrt(int x) { if(x==0) return 0; if(x==1) return 1;原创 2021-12-01 15:01:09 · 5751 阅读 · 1 评论 -
C++ 二进制求和
class Solution {public: string addBinary(string a, string b) { string s; int i,j,k; int temp; if(a.length>=b.length) { int length1=a.length; int length2=b.length; }原创 2021-11-30 14:26:18 · 7332 阅读 · 0 评论 -
C++ 最后一个单词长度
题目:给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。这是第一次尝试直接在leetcode上提交代码,测试了两次终于成功了。完整代码如下:#include <iostream>#include <vector>#include<algorithm>using namespace std;class Solution {public: int原创 2021-11-29 16:05:26 · 698 阅读 · 0 评论 -
C++ 加一问题
题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。这个问题第一眼看起来很简单,确实也很简单。但是需要注意到的是进位问题。例如:输入:digits = [9]输出:[1,0]解释:9+1=10。怎么处理这个进位问题是解这道题的关键。错误方法:整数转化原创 2021-11-28 14:47:54 · 2008 阅读 · 0 评论 -
C++ 最大子序和
题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0这道题确实没想明白。后来看的解析才知道的,先说说自己的思路,想到的是用for循环做,从第一个数字加到数组的最后一个数字,并用临时变量记录最长的原创 2021-11-27 13:50:48 · 1187 阅读 · 0 评论 -
C++ 搜索插入位置
#include #include #includeusing namespace std;class Solution {public:vector list(vector& list){int k = list.size();for (int i = 0; i < k; i++){for (int j = 0; j < list.size()-1; j++){if(list[j]>list[j+1]){int temp;temp = list[j原创 2021-11-26 10:14:42 · 866 阅读 · 0 评论 -
C++ 实现 strStr() 函数
题目给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = "hello", needle = "原创 2021-11-25 22:17:35 · 1196 阅读 · 0 评论 -
C++ 移除元素
题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。这道题与上一篇文章中的题目真没多大区别,感觉基本就是一个类型的。随便改了一下就做出来了:#include <iostream>#include <vector>using namespace std;class原创 2021-11-24 13:14:18 · 1746 阅读 · 0 评论 -
C++ 删除有序数组中的重复项
题目:给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。刚开始对数组不是很了解,特别的这个 O(1) 额外空间的条件下完成一脸懵逼。最后网上盗用了别人的代码实现的(狗头保命)代码如下:#include <iostream>#include <vector>using namespace std;class Soluti原创 2021-11-23 19:15:26 · 3191 阅读 · 0 评论 -
C++ 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解这题之前看到一篇讲链表基本使用的文章,写的很详细。后面代码部分也是参考的这篇文章,可以看一下:https://www.jb51.net/article/214771.htm虽然题目的意思是合并两个有序链表,但是要完全实现题目的意思首先我们需要先生成两个有序链表。一种简单的方式是建立两个链表然后手动有序赋值。但是感觉这样不是很好,所以这里我选择随机生成然后自动排序的方式生成两个链表。:1.随机生成一个链原创 2021-11-22 13:16:23 · 9248 阅读 · 3 评论 -
C++ 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true方法1.栈判断括号的有效性可以使原创 2021-11-21 10:51:58 · 7915 阅读 · 0 评论 -
C++ 最长公共前缀
题目最长公共前缀: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。该题目有两种解法:1.纵向比较因为提取的是前缀字符串,所以我们就选择strs数组中第一个元素作为基准。然后我们将该元素与数组中每一个元素进行位比较。例如:(盗图,来自于这里)比较所有元原创 2021-11-20 13:41:32 · 3412 阅读 · 0 评论 -
C++ 罗马数字转整数(Roman to Integer)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数原创 2021-11-19 13:40:08 · 2176 阅读 · 0 评论 -
C++ 给你一个整数x,如果x是回文数,返回true;否则返回false
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。另外复数也不是回文数,因为-121倒过来是121-。该题目前想到有以下两种解法:1.整体倒置再判断是否相等利用上一篇文章中的方式,将输入整数整体翻转再判断翻转后的数与之前的数字是否相等。代码略微小改动基本与之前一致。int turnaround(int x){ printf("输入:x= %d\n", x); int y=x; if (x == 0) {原创 2021-11-18 10:56:19 · 2315 阅读 · 0 评论 -
C++ 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321数字反转可以通过将前面的数字循环除10求取每一位数字然后反向赋值。该方法可以通过一个while循环实现:...原创 2021-11-17 17:00:47 · 4307 阅读 · 1 评论 -
C++ 判断一个 int 型整数是否为 2 的 N 次方(幂次)
判断一个整数是否为2的幂次方法有以下几种:1.循环除2这是最简单最好理解的方式。对于一个数如果是2的幂次,则其肯定可以被2一直整除直到其值为1。所以可以通过一个while循环判断:void judge(int b){ while (!(b % 2)) { b = b / 2; if (b == 1) { printf("b 是 2 的幂次"); return; } } printf("b 不是 2 的幂次"); return;}while中是一个循环除2原创 2021-11-16 19:15:04 · 14045 阅读 · 3 评论 -
C++ 写出一个反转字符串函数, 例如 “Hello World” 反转成 “dlroW olleH”
对于一个字符串函数,要使其反转输出可以使用两种方式实现。1.反向打印:对于一个字符串,首先确定其长度,然后从后往前遍历每一个字符并打印:for (int i = len-1; i >=0; --i) { printf("%c", a[i]); //b[i] = *c--; //printf("%c", b[i]); }这里len为字符串长度,通过–i的形式让字符串从后往前显示,然后使用printf函数打印出来。2.反向赋值将字符串a的值反向赋值给字符串b,然后打印字符串b原创 2021-11-13 23:21:25 · 1916 阅读 · 0 评论 -
C++ enum枚举类型
一道选择题如下:请选择以下程序的运行结果 ( )#include<stdio.h>int main(){ enum status { pass, fail, atkt}; enum status stud1, stud2, stud3; stud1 = pass; stud2 = atkt; stud3 = fail; printf("%d, %d, %d\n", stud1, stud2, stud3); r原创 2021-11-11 22:46:44 · 1213 阅读 · 0 评论 -
C++ while(*s1++ = *s2++) 与 while(*s1++ == *s2++)
while(*s1++ = *s2++)一道C++题目:请选择以下程序的运行结果 ( )#include<stdio.h>int main(){ char str1[] = "India"; char str2[] = "BIX"; char *s1 = str1, *s2=str2; while(*s1++ = *s2++) printf("%s", str1); printf("\n"); return 0;}A.In原创 2021-11-10 23:24:48 · 2912 阅读 · 0 评论