12 2023 档案
摘要:rufus启动盘下载 https://rufus.ie/zh/#google_vignette b站安装视频 https://www.bilibili.com/video/BV1554y1n7zv?p=3&spm_id_from=pageDriver&vd_source=a0746aac55ddbd
阅读全文
摘要:ADASIS v2 协议中定义了六种消息: POSISTION、STUB、 SEGMENT、PROFILE SHORT、PROFILE LONG、META-DATA,每类消息都是 8 个字 节(由 CAN 总线规定)。 POSITION 描述车辆当前的位置信息,包含当前路径编号、偏移量 offset
阅读全文
摘要:adas地图介于 车机地图和高精度地图之间,精度一般在1-5米, 一般包含 一是道路本身数据信息(增加坡度、曲率数据、航向角) 二是道路相关数据信息(高速公路出口的详细情况、道路相关 POI、道路限速信息、交通标识牌信息) 与传感器相比,adas具备超视距的感知范围,更高精度和匹配度的地图数据 ad
阅读全文
摘要:all_of全部都真 return true any_of 部分真 return true none_of 全假 return true count find copy copy_if copy_n copy_backward move move_backward transform remove
阅读全文
摘要:进程和线程是计算机的基础础概念,它们都是程序执行的基本单位。进程是操作系统资源(如内存、文件、设备等)分配的基本单位,而线程是处理器调度和执行的基本单位。进程和线程之间有一些区别,主要有以下几点: 地址空间:线程共享进程的地址空间,也就是说,它们可以访问同一个内存区域。进程之间的地址空间是是独立的,
阅读全文
摘要:判断(){}是否合法? 多线程 通信方式 手段? 成员函数模板 类模板 智能指针 底层原理 为什么引入 linux 文本定位到最后一行 vi进入之后 :$ 定位到最后一行 一、使用cat、tail、head组合 1、查看最后100行的数据 cat filename | tail -n 100 2、查
阅读全文
摘要:mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下,其基本设计原理为设计一个函数 void mtrace (),函数对 libc 库中的 malloc/free 等函数的调用进行追
阅读全文
摘要:在C++中,condition_variable是一种多线程同步机制,它允许一个或多个线程等待另一个线程发出通知,以便能够有效地进行线程同步1。condition_variable是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待condition_variable的条件成
阅读全文
摘要:https://blog.csdn.net/sjc_0910/article/details/118861539 unique_lock 和 lock_guard 多线程是一种实现并发处理的有效方式,C++11开始引入了<thread>库,使得多线程编程更加容易和高效。以下是C++中多线程编程的一些
阅读全文
摘要:Qt for desktop工具 windeployqt 文件名.exe 进行打包 然后就可以了
阅读全文
摘要:总的来说,QoS是一个强大的工具,它提供了一种高效、灵活的方式来处理分布式系统中的数据通信和共享问题。 在ROS1中,节点间的通信是基于TCP的。因为TCP的失败重传机制,在一些网络不稳定的场景,通信会出现延时严重的问题。这大大限制了ROS1的使用场景。 在ROS2中,采用DDS作为通信中间件。RO
阅读全文
摘要:DDS是一个以数据为中心的中间件协议和API标准,意为用户只关心自己想要的数据,数据通过Topic进行标识,这样发布者根据主题发布数据,订阅者根据自己感兴趣的主题订阅数据。这便是DDS的核心,以数据为中心的发布-订阅模型DCPS(Data-Centric Publish-Subscribe) 如果是
阅读全文
摘要:dds? QoS ROS2 计算机网路 操作系统 mystl 性能测试 json分解 设计模式 Qt的部署配置 ros1 和 ros2 的区别
阅读全文
摘要:condition_variable? 条件变量 内存泄漏的工具
阅读全文
摘要:在使用std::move时,有几个重要的注意事项: std::move并不会真正地移动对象,真正的移动操作是在移动构造函数、移动赋值函数等完成的,std::move只是将参数转换为右值引用1。 std::move将一个左值强制转化为右值引用,以用于移动语义。移动语义,允许直接转移对象的资产和属性的所
阅读全文
摘要:打印同心圆 一个类使用std::move需要什么条件? 怎么复制过去的?是不是传指针? vector扩容机制
阅读全文
摘要:C++程序的编译过程通常分为四个主要步骤: 预处理(Preprocessing):这个阶段主要处理源代码文件中的以“#”开头的预编译指令4。例如,对宏进行展开,对include的文件进行展开,处理条件编译选项判断,清理注释等。预处理后生成的文件通常以.i或.ii结尾2。 编译(Compilation
阅读全文
摘要:移动构造函数是C++11标准中引入的一个特殊的构造函数。它的主要目的是提高程序运行的效率,特别是在处理大型对象或者包含动态分配内存的对象时。 移动构造函数的参数是右值引用,通常用于接受临时对象。在移动构造函数中,新对象会直接接管临时对象的资源,而不是复制这些资源。这样,我们就可以避免一些不必要的深拷
阅读全文
摘要:reinterpret_cast和static_cast都是C++中的类型转换运算符,但它们的用途和行为有所不同。 static_cast: static_cast用于执行比较“自然”和低风险的转换,如整型和浮点型、字符型之间的互相转换。 它也可以用于类层次结构中基类(父类)和派生类(子类)之间指针
阅读全文
摘要:在C++中,const关键字可以用于创建常量,这意味着一旦定义,其值就不能改变。const可以修饰变量、指针、引用等,根据const修饰的对象不同,我们将其分为顶层const和底层const。 顶层const:当const修饰的是对象本身,即对象本身不可被修改,我们称之为顶层const。例如,对于c
阅读全文
摘要:成员初始化列表是C++中的一个特性,它允许在构造函数中对类的成员变量进行初始化。成员初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。例如: class MyClass { public: MyClass(int a, int b) : m_a(a), m_b(b) { } private:
阅读全文
摘要:一般指堆的内存泄漏,简单来说就是已申请的内存空间没有被正确释放。 避免内存泄露的几种方式 计数法:使用new或者malloc时,让该数+1,delete或free时,该数-1,程序执行完打印这个计数,如果不为0则表示存在内存泄露 一定要将基类的析构函数声明为虚函数 对象数组的释放一定要用delete
阅读全文
摘要:C++ string 类的扩容机制主要取决于编译器的实现,但一般来说,它们都遵循一种动态数组的策略,即当字符串的大小超过当前容量时,就会分配更大的内存空间。以下是一种常见的扩容策略1: size_type _Grow_to(size_type _Count) const { size_type _C
阅读全文
摘要:算法 平均时间复杂度 最差空间复杂度 快速排序 nlogn logn 归并排序 nlogn n timsort nlogn n 堆排序 nlogn 1 冒泡排序 n^2 1 插入排序 n^2 1 选择排序 n^2 1 希尔排序 (nlogn)^2 1 桶排序 n+k n 基数排序 nk n+k
阅读全文
摘要:单例模式是一种常用的软件设计模式,其目标是确保一个类只有一个实例,并提供一个全局访问点。在C++中,可以通过以下步骤实现单例模式: 私有化构造函数,以防止外界创建单例类的对象。 使用类的私有静态指针变量指向类的唯一实例。 使用一个公有的静态方法获取该实例。 以下是一个简单的C++单例模式的实现示例:
阅读全文
摘要:c++ 多态? 多态是c++三大特性之一,封装 继承 多态,简单来说就是同一个调用实现不同的操作。而虚函数是实现多态的机制,核心就是通过虚函数实现基类可以调用派生类的方法。一般情况下,一个函数的调用是在编译时静态确定的,而多态使得函数的调用可以在运行时动态确定。当使用类的指针调用成员函数时,普通函数
阅读全文
摘要:在C++中,new关键字主要用于动态内存分配。以下是一些可能需要使用new的情况: 复杂类型:对于复杂类型,如自定义的类类型,通常需要使用new进行动态内存分配。 大量内存空间:当你需要大量的内存空间时,比如你需要一个包含10000个int的数组,这时候你就需要使用new。 内存大小未知:有时实体的
阅读全文
摘要:C++程序在执行时,将内存大致分为以下几个区域: 栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的。(const 在栈里)堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放。new malloc全局区:全局变量、静态变量(static),生命周期是程序整
阅读全文
摘要:在C++中,set、map、unordered_set和unordered_map这四种容器的使用场景如下: set:适用于需要保持元素独特性且无需特定顺序的情况。例如,存储一组唯一的用户名、IP地址等。set实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适
阅读全文
摘要:satic_cast<size_type>(-1); 的问题? max_size() 为什么这么写 如何进行人脸匹配呢? 字符串中的最长子串? \`\`\`cpp#include <string>#include <unordered_map> using namespace std; class
阅读全文
摘要:for(auto itr : array)和for_each(array.begin(),array.end(),func)这两种循环方式都可以用来遍历容器中的元素,但是它们之间存在一些区别: for(auto itr : array):这种方式是C++11新增的基于范围的for循环1。它可以简化对
阅读全文
摘要:ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等) 节点间的通信方式: 1.话题topics 是一种轻量级的通信方式,用于实现发布-订阅模式,即一个节点发布数据,另一个节点订阅数据
阅读全文
摘要:unique_ptr 和 shared_ptr 是 C++ 标准库中的智能指针,用于管理动态分配的对象的生命周期,以避免内存泄漏和手动资源管理的问题。 unique_ptr: std::unique_ptr 是一个独占所有权的智能指针,确保在任何时候只有一个 unique_ptr 拥有对动态分配的对
阅读全文
摘要:在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: ssh-keygen -t rsa -C "youremail@
阅读全文
摘要:在C++中,friend关键字用于声明友元函数或友元类1。友元函数或友元类可以访问当前类的私有成员和保护成员,即使它们不是当前类的成员函数或成员类1。 友元函数是一个独立的函数,而友元类是一个类可以访问另一个类的私有成员和保护成员1。 例如,如果要声明函数为一个类的友元,需要在类定义中该函数原型前使
阅读全文
摘要:在C++中,stack和queue默认使用deque作为底层容器的原因主要有以下几点: 操作效率:deque(双端队列)支持在头尾两端进行插入和删除操作,且时间复杂度都为O(1),非常高效1。而vector在增长到一定长度时为了保证完全连续,需要重新申请更长的内存,并把原来的元素全部拷贝过去2。这使
阅读全文
摘要:在 C++ 中,std::stack 和 std::queue 是容器适配器,它们提供了特定的接口,依赖于某个容器类(如 std::deque 或 std::list)来处理元素1。 std::stack:std::stack 默认使用 std::deque 作为其底层容器2。但是,你也可以在创建
阅读全文
摘要:在 C++ 中,深拷贝和浅拷贝是两种不同的对象复制方式: 浅拷贝:当我们创建一个对象的副本时,如果仅仅复制所有成员变量的数据,那么这就是浅拷贝。这在所有的变量都在栈内存中分配时工作得很好1。但是,如果有些变量是在堆内存中动态分配的,那么复制的对象变量也会引用同一块内存位置1。这将导致二义性和运行时错
阅读全文
摘要:std::forward 在 C++ 中的主要用途是实现完美转发。它的主要好处有以下几点: 保持值类别:std::forward 能够保持函数参数的值类别(即,它是左值还是右值)。这对于保持潜在的移动语义非常重要2。 优化性能:在模板函数中,我们通常使用 std::forward 来转发函数参数,以
阅读全文
摘要:使用 static_cast 的好处主要有以下几点: 增强类型安全:static_cast 是一种显式的类型转换,它要求源类型和目标类型在某种程度上是兼容的。如果尝试进行非法的转换(例如,将 int* 转换为 char*),编译器会报错1。这有助于防止类型错误。 提高代码可读性:static_cas
阅读全文
摘要:auto和decltype都是C++11中引入的关键字,用于自动类型推导,但它们的工作方式有所不同。 auto关键字可以让编译器自动推断变量的类型,使代码更加简洁、易读4。例如: auto a = 42; // a的类型被推断为int auto s = "hello"; // s的类型被推断为con
阅读全文
摘要:数据库的ACID原则是关系型数据库中保证事务的一致性和可靠性的基本原则,其包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四个方面。 原子性(Atomicity):原子性是指一个事务是一个不可分割的工作单位,其中的操作要
阅读全文
摘要:链表适合归并排序而不是快速排序的原因主要有以下几点: 内存访问模式:快速排序的效率主要来源于引用的局部性,计算机硬件在这里得到了优化,因此访问彼此相邻的内存位置往往比访问分散在内存中的内存位置更快。然而,链表单元格经常分散在内存中,所以访问相邻的链表单元格没有局部性的好处。因此,快速排序的一个大的性
阅读全文
摘要:template <class Ty> void destroy(Ty* pointer) { destroy_one(pointer, std::is_trivially_destructible<Ty>{}); } 这样设计的好处主要体现在对泛型编程和内存管理的灵活性上。下面是一些可能的好处:
阅读全文