
机器人C++代码实战笔记
文章平均质量分 85
笔者自985硕士毕业后,在机器人算法领域已经深耕 7 年多啦。这段时间里,我积累了不少宝贵经验。本专栏将结合多年的工作实战总结,将尽力把C++每一块知识都用最通俗易懂的方式讲给大家,并带上实际应用的程序案例。
行知SLAM
笔者自985硕士毕业后,在机器人算法领域已经深耕7年多啦。大家可以在同名【公众号】“机器人及自动驾驶”获取实时技术文章及思维导图pdf版本,并找到星球伙伴一起学习进步。
展开
-
你知道什么时候用uint32_t 和 size_t吗?它们有什么区别?
uint32_t是C++11标准中定义的固定宽度无符号整数类型,明确表示32位无符号整数,定义在<cstdint>头文件中。精确的数值类型,用于存储32位无符号整数。size_t是C++标准中定义的与平台相关的无符号整数类型,通常用于表示内存大小、数组索引等。依赖平台的别名,实际类型可能是或(取决于编译器和系统)。特性uint32_tsize_t定义来源<cstdint>(C++11标准)C++标准内置类型别名数据宽度固定32位(4字节)32位系统4字节,64位系统8字节平台相关性。原创 2025-06-04 11:14:48 · 293 阅读 · 0 评论 -
你知道CMake怎么用get_filename_component函数解析文件路径的各个组成部分(如目录、文件名、扩展名等),或生成绝对路径吗
get_filename_component是CMake中用于解析文件路径的核心命令,主要功能包括获取绝对路径、提取目录/文件名/扩展名等。其基本语法为get_filename_component(<VAR> <FileName> <COMPONENT> [CACHE]),支持ABSOLUTE、PATH、NAME、EXT等组件类型。典型应用场景包括路径规范化、文件名分割、动态路径生成等。使用时需注意路径相对性、文件存在性检查以及缓存变量作用域等问题,常与file(GLOB原创 2025-05-30 15:40:56 · 258 阅读 · 0 评论 -
CMake中如何使用macro和file递归搜索指定目录下的所有C/C++源文件和头文件,避免手写所有文件?
这段CMake代码定义了一个名为的宏,用于递归搜索指定目录下的所有C/C++源文件和头文件,并将结果存储在指定变量中。其核心作用是自动收集项目源文件,避免在CMakeLists.txt中手动列出每个文件。macro:用于创建可复用的CMake代码片段,通过参数传递增强灵活性:递归搜索文件的便捷方式,但需注意缓存问题学习资源:官方文档、社区项目和IDE自动补全是掌握CMake的关键工具最佳实践:小型项目可使用GLOB,大型项目建议手动管理源文件列表。原创 2025-05-30 10:49:01 · 546 阅读 · 0 评论 -
C++中使用static_cast类型转换需要包含什么头文件吗?
在C++中, 是一个内置的类型转换操作符,不需要包含任何额外的头文件。它是C++语言的核心特性,直接在标准语言中定义。与其他类型转换的对比转换操作符是否需要头文件适用场景不需要基本类型转换、继承关系中的显式向上/向下转换安全的运行时类型转换(需要虚函数)不需要低级别的指针/引用转换(非常危险,慎用)不需要移除const/volatile限定符(谨慎使用)注意事项不进行运行时类型检查:如果转换的类型不合法(如将基类指针转换为不相关的派生原创 2025-05-29 10:12:36 · 128 阅读 · 0 评论 -
CMake 头文件路径设置target_include_directories详解
用于为特定目标(如库或可执行文件)指定头文件搜索路径,控制编译器查找。,可以实现头文件路径的清晰管理和依赖传递,提高项目的可维护性和编译效率。避免使用全局指令,提高代码的可维护性。原创 2025-05-29 09:46:43 · 786 阅读 · 0 评论 -
C++ 类的访问控制public、private和protected总结及机器人SLAM代码实例
访问控制概述public属性详解private属性详解protected属性详解ROS机器人领域的应用实例最佳实践总结访问控制类内部派生类外部类/全局代码public✅✅✅private✅❌❌protected✅✅❌默认使用private:除非明确需要外部访问,否则将成员设为private使用protected进行继承设计:当需要子类扩展但禁止外部访问时使用最小化public接口:只暴露必要的功能,隐藏实现细节避免protected成员变量。原创 2025-05-28 17:20:32 · 410 阅读 · 0 评论 -
你知道C++ 为什么要用虚析构函数吗?什么是虚函数?虚函数的工作原理是什么?
虚析构函数是C++中处理多态对象生命周期的重要机制,它确保在通过基类指针删除派生类对象时,所有层级的析构函数都能被正确调用,从而避免资源泄漏。原创 2025-05-28 16:50:21 · 898 阅读 · 0 评论 -
C++ 类中空构造函数与 `= default` 的区别
在你的代码中,如果。原创 2025-05-28 16:44:33 · 888 阅读 · 0 评论 -
C++中size_t和int区别,什么情况下用size_t?
size_t和int是C++中常用的整数类型,但它们在类型、取值范围和使用场景上有所不同。size_t是无符号整数类型,通常用于表示对象大小或数组长度,其取值范围为0到2^n - 1,适合非负计数场景。int是有符号整数类型,取值范围为-2^(n-1)到2^(n-1) - 1,适用于可能为负数的计数场景。使用int作为数组索引可能导致未定义行为,而size_t能在编译阶段发现这类错误。最佳实践中,建议在表示缓存帧数或数组大小时使用size_t,而在可能为负数的场景中使用int。原创 2025-05-20 09:43:05 · 273 阅读 · 0 评论 -
CMake 中设置 C++ 标准方式总结
适合需要精细控制编译选项,同时要指定 C++ 标准和其他特定编译选项的场景,但要注意代码的可移植性。:推荐在大多数情况下使用,尤其是注重代码可移植性和遵循 CMake 最佳实践的项目,它能让 CMake 自动处理 C++ 标准的设置。:适用于需要为所有源文件统一添加编译选项的场景,但不适合仅为 C++ 文件设置 C++ 标准。原创 2025-02-08 08:49:52 · 841 阅读 · 0 评论 -
undefined reference to ros::package::getPath报错问题解决,及roslib库介绍
roslib为 ROS 系统提供了基础的功能支持,是构建 ROS 节点和应用程序不可或缺的一部分。通过掌握roslib的使用,可以更高效地开发和管理 ROS 项目。原创 2025-02-06 16:07:30 · 879 阅读 · 0 评论 -
add_compile_options和set(CMAKE_CXX_FLAGS)设置C++ 编译器使用 C++11 标准的区别总结
二者的核心目的都是让 CMake 在编译 C++ 代码时使用 C++11 标准。C++11 引入了众多新特性,如自动类型推导(auto)、智能指针(等)、范围 for 循环等,使用 C++11 标准可以提升代码的编写效率和安全性。原创 2025-02-06 15:13:01 · 536 阅读 · 0 评论 -
C++ 标准库中 <list>容器总结
std::list是 C++ 标准库中的一个容器,位于<list>头文件中。它是一个模板类,用于实现双向链表的数据结构。双向链表意味着每个节点除了存储数据外,还包含指向前一个节点和后一个节点的指针。std::list高效的插入和删除操作:在链表的任意位置插入或删除元素的时间复杂度为 O(1),这使得它在需要频繁进行插入和删除操作的场景中表现出色。不要求随机访问:与不同,std::list不支持通过下标直接访问元素,因为链表的节点在内存中不是连续存储的。return 0;原创 2025-01-24 11:44:34 · 881 阅读 · 0 评论 -
C++标准库高频使用容器<vector>代码总结,及在机器人SLAM中的使用总结
是 C++ 标准库中的一个容器,它位于<vector>头文件中。它本质上是一个模板类,提供了动态数组的功能。动态数组意味着其大小可以在运行时改变,这与传统的 C 风格数组不同,后者的大小在编译时就必须确定。可以存储各种类型的元素,只要这些元素满足一定的要求(如可复制、可移动等)。数据存储:可以用来存储一系列相同类型的数据,例如整数、浮点数、自定义对象等。动态大小调整:根据程序运行时的需要动态地增加或减少元素数量。随机访问:支持通过下标快速访问任意位置的元素。return 0;原创 2025-01-24 11:24:26 · 949 阅读 · 0 评论 -
如何删除C++标准库<vector>容器元素? remove 、 erase、clear方法总结
在 C++ 中,原创 2025-01-24 11:17:50 · 1442 阅读 · 0 评论 -
C++标准库全面解析及最全代码实例学习
C++ 标准库全面解析引言C++ 标准库发展历程C++ 标准库内容架构4.1 常用头文件分类及功能4.2 头文件命名规律及记忆方法代码实例。原创 2025-01-24 09:56:28 · 752 阅读 · 0 评论 -
C++标准库<limits>中NaN(Not a Number)值代码总结
NaN 没有一个具体的数值,它是一种特殊的浮点数表示,用于表示无效或未定义的计算结果。在编程中,需要特别注意 NaN 的处理,避免因错误的比较操作而产生意外结果,通常使用。函数来正确识别 NaN 值。原创 2025-01-22 15:45:16 · 500 阅读 · 0 评论 -
C++标准库<memory>中std::allocator内存分配用法总结
功能在 C++中,allocator主要用于管理容器的内存分配和释放操作。它将内存分配和对象构造分离开,使容器可以根据不同的需求采用不同的内存管理策略。通过allocator,可以为容器动态分配所需的内存空间,并且在该空间上构造对象,同时也能析构对象和释放内存。这为内存管理提供了更大的灵活性,例如,可以避免频繁使用new和delete操作,提高性能或满足特殊的内存需求(如内存池、共享内存等)。在 C++标准库中的位置allocator是 C++标准库的一部分,它定义在<memory>头文件中。类别。原创 2025-01-22 15:12:35 · 832 阅读 · 0 评论 -
C++`assign` 函数功能总结及代码实例
函数的功能:优点:示例 1:使用 和 代码解释:示例 2:使用 和 代码解释:示例 3:使用 和 代码解释:这些示例展示了如何在不同的容器(、、)中使用 函数,无论是使用 还是 形式,都可以方便地对容器进行元素的重新分配和初始化。这在需要重新初始化容器或复制其他容器元素的情况下非常有用,避免了复杂的元素添加和删除操作,使代码更简洁和易维护。将上述代码保存为 文件,使用 C++ 编译器编译运行,例如:使用 函数可以让你灵活地操作容器的元素,根据不同的需求对容器进行初始化、重置或复制元素原创 2025-01-22 15:06:18 · 484 阅读 · 0 评论 -
C++头文件stdint代码总结
中的类型和宏,可以编写出更具可移植性和健壮性的程序,避免了因不同平台上基本数据类型大小不同而产生的潜在问题。它是 C 和 C++编程中进行精确数据类型控制的重要工具,为跨平台开发提供了便利和保障。在使用这些类型时,要注意不同平台的范围和溢出问题,确保程序在各种环境下都能正确处理数据,尤其是对于涉及不同硬件和操作系统的项目,使用精确宽度的整数类型可以保证程序的正确性和性能。是 C 和 C++中的一个头文件,它提供了具有固定宽度的整数类型的定义,确保了跨平台的整数类型大小一致性。等)的大小可能会有所不同,而。原创 2025-01-24 09:15:00 · 788 阅读 · 0 评论 -
C++配置文件yaml库代码使用及在机器人中的应用总结
使用 YAML 格式的文件可以让配置信息易于编辑和管理,避免将配置硬编码到程序中,方便不同环境和实验的配置调整。同时,通过解析和生成 YAML 数据,可以实现不同模块之间的数据交换和存储,提高程序的可配置性和可维护性。YAML 是一种人类可读的数据序列化语言,常用于配置文件、数据交换和存储,它的格式简洁明了,比 XML 和 JSON 更易于阅读和编写。库,并在编译时包含相应的头文件和库路径。此外,要注意 YAML 数据的结构和类型转换,确保程序能够正确处理各种可能的数据类型和数据结构,以避免运行时错误。原创 2025-01-23 09:00:00 · 1061 阅读 · 0 评论 -
c++谷歌开源库gflag总结
的头文件,它提供了一种声明和解析命令行参数的便捷方式,可用于 C++程序。它不是 C++标准库的一部分,但在许多 C++项目中被广泛使用,特别是在大型项目和 Google 的开源项目中,用于处理命令行参数的定义、解析和使用。提供了一种强大的命令行参数处理机制,它可以帮助 C++程序更好地处理命令行输入,使程序更具可配置性和灵活性。可以提高程序的可维护性和用户友好性,将命令行参数处理从程序的主要逻辑中分离出来,使程序的命令行参数部分更加清晰和易于管理。例如,在一个图像处理程序中,可以使用。原创 2025-01-22 09:30:00 · 611 阅读 · 0 评论 -
C++标准库unique_lock、lock_guard等几种锁的区别总结
在选择锁时,根据具体的多线程编程需求和场景,综合考虑代码的复杂性、是否需要多个锁、是否需要超时等待、是否涉及递归等因素,选择最适合的锁类型。同时,为了提高代码的安全性和可维护性,尽量使用 RAII 方式管理锁,如。,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。,点击链接进入该星球可以。原创 2025-01-23 09:00:00 · 1355 阅读 · 0 评论 -
C++标准库<tuptle>元组代码总结及在机器人SLAM中的应用
C++<tuple>头文件是 C++ 标准库的一部分,它主要提供了一个名为std::tuple的类模板,用于创建一个固定大小的异构值集合。std::tuple可以将多个不同类型的值组合成一个单一的对象,这在处理需要同时传递多个不同类型数据的场景时非常有用,例如在函数返回多个值、数据打包传输等情况下,能够以一种简洁且类型安全的方式组织数据,提高了代码的灵活性和可读性。默认构造:创建一个所有元素都初始化为默认值的元组。cpp复制值初始化:通过指定每个元素的值来构造元组。cpp复制列表初始化。原创 2025-01-22 08:00:00 · 1402 阅读 · 0 评论 -
c++标准库<thread>多线程代码总结及在机器人SLAM中的应用
可以充分利用现代多核处理器的优势,将程序的不同部分并行执行,提高程序的性能和响应能力。它主要包含类和函数,而不是模板函数或普通的模板类,其中最核心的是。在机器人 SLAM 项目中,多线程可用于同时处理不同的任务,提高系统的性能和实时性。是 C++标准库中的一个头文件,它提供了对线程的支持,允许 C++ 程序创建和管理线程,实现多线程编程。,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。在多线程编程中,需要注意线程安全问题,例如使用互斥锁(类,用于创建和操作线程。原创 2025-01-21 15:14:40 · 627 阅读 · 0 评论 -
c++标准库<stdexcept>异常处理代码总结及在机器人SLAM中的应用
是 C++标准库中的一个头文件,主要提供了一些标准异常类,这些异常类都是标准库中各种异常情况的抽象,允许程序在运行时抛出和捕获异常,以进行错误处理。它主要包含普通的类,而不是模板类或模板函数。通过使用这些异常类,程序可以在出现错误时抛出相应的异常,在合适的位置进行捕获和处理,使程序更加健壮和可靠,避免因错误导致程序崩溃或产生未定义行为。是最常用的,用于处理数据访问越界和输入参数错误的情况,而其他异常类则根据具体的计算和操作在需要时使用,确保程序在出现错误时能够优雅地处理异常,提高系统的可靠性和稳定性。原创 2025-01-21 15:08:40 · 922 阅读 · 0 评论 -
C++代码如何回退 Git 中指定文件?
请确保在执行这些操作前备份重要数据,尤其是当你不确定是否要完全覆盖当前文件时。如果你在执行过程中遇到问题,例如无法找到文件的历史记录或者无法正确检出文件,请检查文件路径是否正确,以及是否存在所需的commit。如果你在使用Git过程中遇到其他问题,欢迎继续向我咨询,我可以为你提供更多帮助。,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。注意:如果你已经将修改的文件添加到暂存区(使用。将其从暂存区移除,然后再使用。添加到暂存区,可以先执行。),你可能需要先使用。原创 2025-01-20 14:57:23 · 940 阅读 · 0 评论 -
c标准库<stat>处理文件或目录的各种属性和状态信息总结
用途:<sys/stat.h>主要用于处理文件或目录的各种属性和状态信息,如文件大小、权限、创建时间、修改时间、访问时间等。通过这些信息,开发者能够对文件进行全面的管理和操作。是否属于C++标准库:该头文件并非C++标准库的一部分,而是属于类Unix系统的系统头文件,在Linux、macOS等系统下广泛使用,Windows系统通常没有这个头文件,若要在Windows下实现类似功能,需要借助其他库或方法。类型。原创 2025-01-20 13:44:59 · 762 阅读 · 0 评论 -
C++标准库<regex>正则表达式总结及在机器人 SLAM 中的应用实例
这个正则表达式的目的是在日志文件中查找以逗号分隔的三个小数,这三个小数可能表示机器人在三维空间中的。原创 2025-01-20 13:41:33 · 679 阅读 · 0 评论 -
C++标准库多线程中<mutex>和atomic有什么区别?
并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。在多线程编程中,根据需要保护的资源和操作的复杂性,选择。对于复杂的数据结构和代码块,使用。对于简单的变量操作,优先考虑。等辅助类提高代码的健壮性。,点击链接进入该星球可以。原创 2025-01-18 22:29:00 · 932 阅读 · 0 评论 -
C++标准库<memory>头文件介绍
本文首发,点击链接进入该星球可以,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。<memory><memory>是C++标准库中的一个头文件,它提供了多种工具来帮助管理内存和资源,主要包括智能指针和分配器。它包含了一些模板类和模板函数,这些工具利用RAII(ResourceAcquisitionIsInitialization)原则,使得资源管理更加安全和高效,避免了常见的内存泄漏和悬空指针问题。原创 2025-01-18 22:27:31 · 1164 阅读 · 0 评论 -
C++标准库<limits>头文件详解及在机器人SLAM项目中的应用
本文首发,点击链接进入该星球可以,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。<limits>原创 2025-01-18 22:26:43 · 948 阅读 · 0 评论 -
c++标准库<iomanip>输入输出操作总结及在机器人SLAM中的应用
例如,在输出机器人的位置估计误差、地图构建进度或传感器校准信息时,使用合适的格式化操作可以使数据更加清晰,提高开发和调试效率。它提供了一些操纵符(manipulators),这些操纵符可以被插入到输入输出流中,以改变数据的显示方式,包括设置字段宽度、填充字符、精度、数字格式(如十进制、十六进制、科学计数法)以及对齐方式等。它提供的操纵符可以满足各种格式化需求,从简单的字段宽度和填充字符设置,到复杂的数字格式和对齐方式调整,都可以通过简单的函数调用实现,为C++程序的输出格式化提供了便利。原创 2025-01-18 22:25:56 · 719 阅读 · 0 评论 -
C++标准库<initializer_list>类型总结
类型,这是一种轻量级的容器类,主要用于支持统一初始化(uniforminitialization)和列表初始化(listinitialization)的语法,允许使用花括号。可以清晰地传递这些数据,避免繁琐的逐个参数传递,并且可以利用统一初始化语法来初始化相关的类和函数参数,使代码更简洁和直观。函数可以方便地操作列表元素,在各种C++程序中,包括机器人SLAM项目,都可以极大地提升代码的简洁性和可维护性。是C++中一个非常实用的头文件,它提供了一种简洁的方式来初始化对象和传递元素列表,通过。原创 2025-01-18 22:21:07 · 1051 阅读 · 0 评论 -
C++标准库<functional>函数总结及在机器人SLAM中的应用
是C++标准库中的一个头文件,主要提供了一些用于函数对象、函数包装和函数调用的工具。它包含了多个模板类和模板函数,可将函数、函数指针、Lambda表达式和成员函数等封装为可调用对象,方便在不同的编程场景中使用。用于参数绑定和可调用对象的转换,它们一起为处理复杂的传感器数据处理和系统操作提供了便利,提高了系统的可扩展性和可维护性。,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。头文件提供了强大的工具,用于实现灵活的函数对象存储和调用机制。在机器人SLAM开发中,原创 2025-01-18 22:20:26 · 688 阅读 · 0 评论 -
C++标准库<cstdlib>头文件总结
C++兼容版本,提供了一系列通用的实用函数和宏,用于执行各种基本操作,如内存分配、进程控制、数值转换、随机数生成、环境变量操作等。这些函数和宏提供了对一些基本的系统级操作的支持,帮助开发者在C++程序中完成一些底层操作,虽然不是专门为面向对象编程设计,但在一些需要与系统交互、进行基本数据操作和资源管理的场景中非常有用。提供了一些基本的系统级操作,但在C++编程中,尤其是在机器人SLAM这样的复杂项目中,应尽量使用更现代、更安全的C++标准库功能,仅在必要时使用。原创 2025-01-18 22:18:37 · 952 阅读 · 0 评论 -
C++标准库<condition_variable>线程同步代码实战总结
允许线程在满足某些条件时等待,直到其他线程通知它们可以继续执行。这在多线程编程中非常有用,特别是当一个线程需要等待另一个线程完成某些操作或满足某些条件时,它可以避免忙等待(不断检查条件是否满足),从而提高CPU效率。提供了强大的线程同步和通信机制,在多线程编程中发挥着重要作用,对于机器人SLAM等复杂多线程项目,可以确保线程间的协作和资源的安全访问,提高程序的性能和可靠性。等函数,可以实现复杂的线程同步逻辑,满足不同任务的需求。在机器人SLAM项目中,多线程编程是常见的,原创 2025-01-18 22:13:14 · 569 阅读 · 0 评论 -
C 语言<termio.h>标准库头文件终端 I/O 操作方法总结
功能是一个C语言标准库头文件,而不是C++标准库头文件,它提供了对终端I/O操作的控制功能,主要用于设置终端的输入输出模式、波特率、字符大小、奇偶校验等属性。在C++中可以使用或进行基本的I/O操作,但提供了更底层的控制功能,适用于需要对终端设备进行特殊设置的场景,如串口通信、终端设备的原始模式设置等。类型中主要包含结构体和函数,而不是模板类或模板函数。它包含termios。原创 2025-01-16 11:15:44 · 952 阅读 · 0 评论 -
C++标准库cmath和math头文件区别及在机器人 SLAM 项目应用实例
一、基本信息::二、代码示例在这个例子中, 函数来自 ,由于是 C 语言的头文件,函数在全局命名空间中,无需使用 前缀。在这个例子中,使用 中的 函数,通过函数重载可以处理不同的浮点数类型。同时,注意使用 前缀,因为函数在 命名空间中。三、区别总结四、推荐使用在 C++ 编程中,推荐使用 而不是 ,因为 充分利用了 C++ 的特性,提供了更好的类型安全性和可维护性。此外,使用 符合 C++ 的编程习惯,有助于避免命名空间污染和函数调用的混淆,特别是在使用多种浮点数类型的情况下, 的函数重原创 2025-01-16 21:55:02 · 469 阅读 · 0 评论 -
C++标准库chrono和ctime时间总结及在机器人 SLAM 项目应用实例
提供了传统的时间表示和转换功能,可在需要 C 语言兼容或简单时间显示的场景中使用。在机器人 SLAM 项目中,两者结合可以满足不同的时间处理需求,确保系统的性能和可维护性。在机器人 SLAM 项目中,时间处理是非常重要的。提供了高级的时间处理功能,适用于现代 C++开发中的精确时间管理,而。在机器人 SLAM 中,原创 2025-01-16 21:54:34 · 471 阅读 · 0 评论