- 博客(281)
- 收藏
- 关注

原创 leetcode需要背下来的程序&语法糖 [Python][C++][更新中]
本文提供了Python与C++常用函数对照速查表,涵盖对象创建、类型转换、容器操作、数学计算、字符串处理、进制转换、文件操作等多个方面。包含字典/集合创建、类型判断、列表操作、排序搜索、字符串格式化等核心功能的实现对比,并附有C++中整数转二进制字符串的实现示例。同时介绍了int32/64等基本数据类型的取值范围,以及科学计数法输出常量极值的C++代码示例。该速查表可作为Python开发者学习C++或C++开发者参考Python实现的快速索引工具。
2025-05-29 23:38:18
364

原创 弱监督语义分割学习计划(0)-计划制定
经过与deepseek的一番讨论和交流,DeepSeek为我设计了一个。:Class Activation Map (CAM)优化、伪标签迭代。:掌握图像级/点监督分割方法,构建弱监督野外场景Pipeline。,结合理论与实践,并最终导向可落地的开源项目。:解决野外场景的域偏移问题(如仿真→真实场景迁移):构建完整Pipeline,产出开源仓库与仿真视频。:掌握传统语义分割核心模型与野外场景数据特性。
2025-02-18 14:17:20
910
原创 【足式机器人控制】名义落足点与Raibert落足点详细讲解
名义落足点是理想步态下规划的脚落地位置,由步态生成器给出,不包含反馈调整。而Raibert落足点是在名义落足点基础上加入速度和姿态反馈修正后的实际落足点,用于实现动态稳定控制。两者关系密切,Raibert方法常用于四足机器人控制中,在名义落足点基础上进行实时调整以保证运动稳定性。简单来说,名义落足点是理论参考点,Raibert落足点是包含反馈的实际控制点。
2025-10-13 22:27:39
574
原创 C++浮点数取余函数fmod()介绍
C++标准库中的fmod()函数用于计算浮点数的除法余数,位于<cmath>头文件中。其函数原型支持double、float和long double类型,返回值的符号与被除数一致。使用时需注意除数不能为零,否则行为未定义。与整数取余运算符%不同,fmod()专为浮点数设计,适用于科学计算等场景。示例展示了如何计算5.3除以2.1得到余数1.1的过程。
2025-10-13 20:00:25
224
原创 C++ exit()函数使用场景与使用方法
exit()是C/C++标准库中用于终止程序的函数,定义在<cstdlib>头文件中。它接受一个状态参数(0表示成功,非0表示错误),会立即结束程序运行,并执行基本的清理工作:调用atexit注册的函数、刷新缓冲区、析构静态对象,但不会析构局部对象。与return相比,exit()更突然;与abort()相比,exit()会进行部分清理。适用于需要立即终止程序的场景,但需注意资源管理问题。合理使用可以提高程序的健壮性。
2025-10-13 16:46:42
124
原创 Linux jq 命令详解及应用场景
摘要:jq是Linux中处理JSON数据的强大命令行工具,支持数据过滤、转换、聚合等操作。本文介绍了jq的五大应用场景,包括数据筛选、格式转换、统计分析等,并提供了提取字段、过滤数据、转换为CSV、计算平均值等实用示例。通过jq,用户可以高效解析和操作JSON数据,提升工作效率。这些示例展示了jq在简单和复杂数据结构中的灵活应用。
2025-09-27 21:58:23
488
转载 【shell学习】【转载】学习shell有什么好书推荐
认真学习完这里推荐的资料,就算得上是shell脚本老手了,不过,凡事都是凭兴趣,我相信这篇文章对 shell脚本感兴趣的新手会有很大的帮助。这是我强烈推荐的一本书,我的shell脚本从新手到老手全靠这本书。这是一本印度人写的开源免费书籍(印度人好像比较喜欢也有能力干这事),应该算是入门书籍, 不过作者表达能力太强,交代的东西也很多,所以无论老手还是新手,看这本书都会有一定的收获。此外,这本书的作者是一个印度人,二十岁的时侯写下了这本书,那时他已经是Ubuntu 和Fedora的源码贡献者了。
2025-09-27 01:56:24
60
原创 Ubuntu 中 Bash / Zsh / Ash / Dash 的使用与区别(含对比图)
本文介绍了Linux系统中常见的Shell类型及其特点。Bash是Ubuntu默认交互式Shell,功能丰富;Zsh作为增强版Bash,支持更多高级功能;Ash和Dash则是轻量级Shell,适用于嵌入式系统和脚本执行。文章通过对比表展示了各Shell在功能、速度、兼容性上的差异,并提供使用建议:日常推荐Bash/Zsh,通用脚本应遵循POSIX标准,资源受限系统可选用Ash/Dash。最后说明了如何切换默认Shell。不同Shell适用于不同场景,用户可根据需求选择。
2025-09-25 21:02:48
952
原创 ubuntu安装手册命令man的优化版本tldr(too long, didn‘t read)
TLDR是一个简化命令行工具帮助信息的项目,提供常用命令的简明示例。它帮助用户快速查找命令基本用法,避免阅读复杂的手册页。在Ubuntu 20.04上可通过homebrew安装tlrc客户端,使用"tldr 命令名"查看简洁帮助。这个社区驱动的工具支持多平台,适合新手和经验用户快速查询命令用法,显著提高命令行使用效率。
2025-09-25 20:30:03
766
原创 C++ 中 size_t 的用(用于跨平台编译)
size_t是C/C++中的无符号整数类型,用于表示对象大小、数组索引和内存分配等场景。它能够自动适配不同平台,确保足够存储当前系统的最大地址范围。常见应用包括sizeof返回值、STL容器的.size()方法、内存分配函数参数等。由于是无符号类型,需注意与有符号数混合运算可能导致意外结果,特别在循环遍历时要避免死循环。size_t比直接使用unsigned int更安全,适合跨平台开发。
2025-09-22 15:02:18
387
原创 git移除自己之前添加的submodule
如下所示添加了一个submodule,但是又不需要了所以想要移除,git在添加的时候很方便,只要一个命令就可以,但是在移除的时候就很不方便了,所以写一个文章记录一下移除的过程,争取能够做到去污无残留。看起来你遇到了一个 submodule 的残留问题。通过这些步骤,你应该能够清理掉残留的 submodule 信息并重新添加它。命令进行查看,如果有自己需要删除的submodule就删除即可。如果以上步骤仍然无法解决问题,考虑使用。如果仍然出现错误,可以尝试使用。
2025-09-17 14:39:54
312
原创 XPath:从入门到能用
XPath是一种用于在XML/HTML文档中查找节点的语言,广泛应用于爬虫、自动化测试和XML解析。其语法类似文件路径,支持按标签名、属性、文本内容及层级关系精准定位元素。核心符号包括:/(根节点)、//(所有子孙节点)、@(属性)等。XPath提供强大的模糊匹配(contains/starts-with)和位置筛选([n]/last())功能,比CSS选择器更灵活。通过text()和@attr可提取文本和属性值。典型应用场景包括批量获取网页数据、表单元素定位等,是处理结构化文档的高效工具。
2025-09-08 23:38:49
461
原创 ROS与SDF/URDF的关系及其设计差异(为什么ROS不能直接调用sdf模型进行控制)
ROS不直接支持SDF:因其核心定位不依赖仿真器,且URDF已满足基础需求。间接协作:通过Gazebo的转换和接口插件,ROS可以间接使用SDF模型的全部功能。未来趋势:ROS 2和Gazebo的深度整合(如ros_gz)可能进一步简化SDF在ROS中的应用。纯ROS功能(如可视化、运动规划)→ 使用URDF。高保真仿真(多机器人、复杂物理)→ 使用SDF并通过Gazebo与ROS交互。
2025-09-08 21:11:37
718
原创 Gazebo1: gz命令工具理解与掌握
本文总结了Gazebo仿真工具中的常用命令行操作,主要包括11个核心功能模块。内容涵盖相机属性调整(gz camera)、模型管理(gz model)、世界控制(gz world)、日志处理(gz log)、标记物操作(gz marker)、关节控制(gz joint)、SDF文件处理(gz sdf)、性能统计(gz stats)以及主题管理(gz topic)等。每种命令都配有实际操作示例和效果截图,如通过gz marker添加可视化球体标记、使用gz model加载和删除Turtlebot3模型等。文章
2025-09-08 20:22:57
719
原创 C 语言标准输入输出库:`stdio.h` 的使用详解
stdio.h是C语言的标准输入输出头文件,提供终端I/O、格式化输入输出、文件操作等功能。它定义了三个标准流(stdin/stdout/stderr)和常用函数如printf、scanf、文件操作(fopen/fclose)等。使用时需注意安全规范,如用fgets替代gets、检查文件操作返回值、正确关闭文件等。掌握stdio.h是C程序员的基本功,涉及格式化I/O、文件读写和错误处理等重要编程技能。
2025-09-03 20:37:06
1675
原创 C/C++ 中的inline(内联函数关键字)详解
C/C++中的inline关键字用于定义内联函数,通过将函数代码直接插入调用位置来减少函数调用开销,提高运行效率。内联函数适合短小、频繁调用的函数,相比宏更安全但可能增大代码体积。文章详细介绍了inline的概念、作用、使用方法、适用场景及注意事项,并提供了示例说明其与宏的区别。inline仅作为编译器优化建议,最终是否内联由编译器决定,使用时需权衡性能和代码体积。
2025-09-03 19:50:13
848
原创 C++ numeric库简介与使用指南
C++ <numeric> 库提供了多种数值运算工具,包括累加、相邻差值、内积和序列生成等功能。主要函数有 std::accumulate(求和/累乘)、std::inner_product(内积计算)、std::adjacent_difference(相邻元素差值)、std::partial_sum(部分和)和 std::iota(递增填充)。这些函数适用于支持迭代器的容器(如 vector、数组),具有泛型特性,可自定义运算规则。使用时需注意浮点精度问题,并行计算推荐C++17的 std::
2025-09-02 22:43:04
446
原创 创建一个只能直接构造和销毁,但不能被复制和移动的基类
这段代码定义了一个ROS的ControllerBase基类,通过=delete显式禁用了拷贝构造、拷贝赋值、移动构造和移动赋值操作,确保该类的对象不能被复制或移动。默认构造函数和虚析构函数被保留,允许直接构造和销毁对象。这种设计常用于需要严格控制对象生命周期的场景,如单例模式或资源管理类,防止错误的拷贝操作和多个对象持有同一资源。右值引用(&&)的禁用进一步强化了不可移动性。整体上,该基类实现了仅允许构造和销毁,禁止复制和移动的语义。
2025-09-02 21:47:14
312
原创 C++ 左值引用与右值引用介绍
C++11引入了左右值引用机制,左值引用(T&)只能绑定左值,用于避免拷贝和参数传递;右值引用(T&&)专用于绑定临时对象,支持移动语义和完美转发,提升性能。关键区别在于:左值引用操作持久对象,右值引用处理临时值。移动构造函数和std::forward利用右值引用实现资源转移和完美参数转发。使用时需注意悬挂引用和对象状态问题。该特性显著优化了C++的资源管理效率。
2025-09-02 21:22:30
873
原创 Python实现浅拷贝的常用策略
在Python中,result = prices会使result和prices引用同一个列表对象,因此修改result会直接影响prices的值。若需避免这种情况,应使用prices[:]或list(prices)创建副本。这样修改result时,原prices列表保持不变。
2025-09-02 20:24:45
226
原创 什么时候需要使用虚继承,什么是菱形继承
这篇文章解释了C++中虚拟继承(virtual inheritance)的作用及其在ROS控制框架中的应用。虚拟继承主要用于解决多重继承中的菱形继承问题,确保派生类只保留一份公共基类实例。文章分析了普通继承会导致的问题,如二义性访问和数据冗余,并说明虚拟继承如何通过共享基类实例来解决这些问题。同时指出虚拟继承不应滥用,因其会带来额外开销、降低可读性、增加代码复杂度,建议仅在可能出现重复基类的场景(如框架接口类)使用。在ROS的ros_control框架中,Controller类采用虚拟继承Controlle
2025-09-02 19:00:34
594
原创 C++ 中的 * 与 & 运算符详解
本文介绍了C++中指针操作的两个关键符号:*(解引用)和&(取地址)。&用于获取变量内存地址,返回指针;*用于访问指针指向的值。文章解析了它们的用法差异,包括指针定义与解引用、函数参数中的引用、以及指针与引用的结合使用,并通过交换变量的示例演示了实际应用。最后总结了这两个符号在不同场景下的作用:&用于取地址,*用于解引用,同时区分了指针声明和引用传递中的符号含义。
2025-09-02 17:15:34
559
原创 C++ 中类模板参数的使用详解
本文介绍了C++类模板的概念及其参数类型。类模板允许将类型或数值参数化,提高代码复用性和灵活性。主要参数类型包括:类型参数(最常用,用于泛型数据结构)、非类型参数(接受常量值)和模板模板参数(参数本身是模板)。类模板支持默认参数、特化和部分特化,可针对特定需求优化实现。合理使用类模板参数能编写高度通用的类,提升代码复用性。
2025-09-02 16:56:04
515
原创 C++ Iterator 使用方法详解
C++迭代器是访问容器元素的通用工具,提供统一方式遍历不同结构的容器(如vector、list等)。迭代器分为五类:输入、输出、前向、双向和随机访问迭代器,功能依次增强。通过iterator、const_iterator等类型别名使用,支持解引用、移动等操作。迭代器可与STL算法结合,C++11后可用auto和范围for简化代码。使用时需注意迭代器失效和越界问题。迭代器是STL核心,能提高代码效率和可维护性。
2025-09-02 15:38:01
1014
原创 C++ <utility>头文件详解及使用方法
C++标准库中的<utility>头文件提供了多种实用工具,主要包括std::pair(存储键值对)、std::swap(交换对象)、std::move(实现移动语义)、std::forward(完美转发)以及std::declval(类型推导)等功能。这些工具广泛应用于泛型编程、性能优化和简化代码逻辑中,例如在容器操作、函数返回值处理和模板元编程等场景。通过合理使用这些工具,可以提升代码的效率和可读性,是现代C++开发中的重要组成部分。
2025-09-01 21:55:07
472
原创 stdexcept介绍与使用指南
C++ 的 <stdexcept> 头文件提供了一套标准异常类(如 out_of_range、invalid_argument 等),但这些异常需要手动抛出,不会自动应用于原生数组或容器的 operator[] 越界访问。它们的实际用途体现在: 标准库容器:vector::at() 等安全方法在越界时会主动抛出 std::out_of_range; 自定义代码:开发者可手动抛出这些标准异常类(如 if (index >= size) throw out_of_range(...)),使错误
2025-09-01 21:42:38
963
原创 C++ multiset数据结构的使用情况说明
摘要: multiset(C++ STL)适用于需要动态维护有序集合且允许重复元素的场景。其特性包括自动排序(O(log n)操作)、支持重复值、迭代器稳定。典型应用包括: 动态数据(如游戏排行榜、股票价格)的实时排序 统计元素出现次数(如投票系统) 支持删除任意元素的优先队列 高效区间查询(如分数段统计) ✅ 关键区别: 需有序+重复 → multiset 需有序+去重 → set 仅统计频率 → unordered_multiset
2025-09-01 17:22:54
743
原创 C++关于手动抛出异常,自动抛出异常以及一些不会抛出异常的情况说明
本文介绍了C++中异常的三种抛出方式:显式抛出(使用throw关键字)、库函数/运行时自动抛出(如vector::at()越界检查、new内存分配失败)以及未定义行为导致的程序崩溃。重点说明了try-catch仅用于捕获异常而不会触发异常,并区分了标准库会抛出异常的行为(如边界检查)与原生操作可能导致的未定义行为(如数组越界访问)。文章通过代码示例演示了不同场景下的异常处理方式,帮助读者理解C++异常机制的工作原理。
2025-09-01 17:13:19
386
原创 C++ 用于处理异常的exception库使用指南
C++的exception库提供了异常处理机制,通过try、catch和throw关键字实现错误管理。exception类是所有标准异常的基类,包含what()方法返回错误信息。文章介绍了异常处理的基本概念、标准异常类的使用、自定义异常类的创建方法,以及异常传播机制和注意事项。异常处理能提高代码健壮性,但需注意性能开销和析构函数中的使用限制。
2025-09-01 17:08:33
313
原创 C++ 用于运行时类型识别的typeinfo库使用指南
C++中的typeinfo库支持运行时类型识别(RTTI),包含type_info类和typeid操作符。type_info提供类型名称获取(name())和比较功能,typeid可获取表达式或类型的type_info对象。该功能在多态编程中尤为重要,能动态识别派生类类型,但会带来一定性能开销。示例展示了如何通过typeid获取基类和派生类类型信息并进行比较。使用时需注意多态性影响和编译器差异。typeinfo为调试、日志和多态实现提供了有效工具。
2025-09-01 16:54:00
288
原创 C++标准库断言头文件<cassert>使用指南
<cassert>是C++标准库中用于调试断言的头文件,通过assert(condition)宏验证程序假设条件是否成立。若条件为假,程序会输出错误信息并终止。断言常用于开发阶段捕获逻辑错误,但不应用于生产环境(可通过定义NDEBUG禁用)。文中展示了除零检查和ROS硬件接口中的指针验证两个典型用例,强调断言在调试和防御性编程中的作用,同时提醒断言不应替代正常错误处理机制。合理使用断言能提升代码可靠性和可维护性。
2025-08-29 17:23:47
420
原创 C++模板类的详细介绍和使用指南
摘要:C++模板类是一种支持泛型编程的强大特性,通过类型参数化实现代码复用。文章介绍了模板类的基本概念、定义方式(使用template关键字)和实例化过程,并展示了多参数和非类型参数的用法。通过vector和priority_queue等STL容器示例,说明了模板类如何根据传入类型生成不同实现。同时指出模板在编译时实例化可能导致的代码膨胀问题,并提及模板特化、SFINAE等高级技巧。模板类能显著提升代码灵活性,是C++泛型编程的核心工具。
2025-08-29 17:01:04
455
原创 求一个整数x的平方根到指定精度[C++][Python]
本文介绍了三种计算非负整数平方根的算法:袖珍计算器法(利用指数和对数公式)、二分查找法(逐步逼近整数解)和牛顿迭代法(快速收敛到高精度解)。其中袖珍计算器法和牛顿法可以扩展到指定精度的小数解,而二分法仅能获得整数解。每种方法都给出了C++和Python实现代码,适用于不同精度需求场景。文章还提供了Leetcode官方题解参考链接,并说明如何修改代码来获取指定精度的平方根结果。
2025-08-29 15:45:35
653
原创 C++中float与double的区别和联系
C++中的float和double均为浮点类型,但存在显著差异:float为4字节单精度,提供约6-7位有效数字;double为8字节双精度,精度达15-16位。double数值范围更大,精度更高,现代CPU中性能接近float但更稳定。默认浮点字面量为double,float需加f后缀。建议优先使用double以确保精度,仅在存储受限或大量数据时选用float。
2025-08-29 15:40:18
484
原创 urdf中joint的类型,含义,区别以及它们之间的关系
URDF关节类型详解 URDF中的<joint>定义了机器人部件间的连接方式,主要分为两类: 无自由度关节 FIXED:刚性连接,无相对运动。 有自由度关节 REVOLUTE(旋转,有限角度) CONTINUOUS(无限旋转,如车轮) PRISMATIC(线性滑动) PLANAR(平面内2平移+1旋转) FLOATING(6自由度自由运动) UNKNOWN为占位类型,不建议使用。 关键区别: REVOLUTE与CONTINUOUS均旋转,但后者无角度限制。 PRISMATIC仅单轴平移,而PLA
2025-08-27 15:57:09
526
原创 C++函数声明的参数名称可以不写
C++函数声明和定义在参数命名上具有灵活性:声明时可省略或使用不同参数名(编译器仅校验类型和顺序),而定义时必须指定参数名以便函数体使用。虽然语法允许差异,但为保持代码可读性,建议声明和定义采用一致的参数命名。示例显示声明中第三个参数未命名,而定义中则补充了参数名"cmd"以用于函数实现。
2025-08-27 15:37:02
326
原创 urdf文件可以使用的一些工具(urdf检查和可视化)
本文介绍了ROS中机器人模型文件(xacro/urdf)的处理方法:1) 使用xacro命令将xacro文件转换为urdf格式;2) 通过check_urdf命令解析urdf文件,输出link层级关系;3) 利用urdf_to_graphiz命令生成包含joint和link结构的可视化PDF。这些工具可以帮助开发者验证和调试机器人模型文件的结构完整性。
2025-08-27 15:24:08
547
原创 C++ 中 ::(作用域解析运算符)的用途
C++中的作用域解析运算符::主要用于明确指定变量、函数或类型所属的命名空间或类作用域。关键应用场景包括:访问被局部变量遮蔽的全局变量、调用特定命名空间的成员、类外定义成员函数、访问静态成员、使用作用域枚举、解决多重继承冲突、模板类成员定义,以及访问全局命名空间成员。该运算符能有效消除命名冲突,提高代码的可读性和安全性,是C++中管理作用域的重要工具。
2025-08-27 14:20:39
556
原创 C 语言标准输入输出头文件stdio.h及其常见用法
stdio.h是C语言标准输入输出头文件,提供格式化输入输出、字符处理、文件操作等功能。主要函数包括printf/scanf进行格式化IO,fgets/fputs处理字符数据,fopen/fclose管理文件读写。该头文件定义FILE类型和NULL、EOF等宏。使用需注意安全性,避免不安全的gets,推荐fgets替代,并注意检查返回值、及时关闭文件。stdio.h是C语言IO操作的核心,掌握其基本用法对文件处理和标准IO至关重要。
2025-08-23 23:27:20
691
原创 C++的struct里面可以放函数,讨论一下C++和C关于struct的使用区别
文章摘要:本文解析了C++中struct结构体可以包含函数的原因。在C++中,struct本质上与class相同(仅默认访问权限不同),因此支持成员函数、构造函数等面向对象特性。通过UserValue示例展示了构造函数自动初始化和成员函数手动调用的区别,说明这种设计将数据与操作绑定,符合面向对象思想,使代码更模块化、易维护。C++的struct支持函数是区别于C语言的重要特性。
2025-08-23 22:39:06
373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人