- 博客(211)
- 资源 (7)
- 收藏
- 关注
原创 5.最长回文字串
给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”
2024-01-30 11:18:43
522
原创 C++ map::begin()、end()
在C++中,std::map是一个关联容器,它提供了一种键-值对的存储方式,并按照键的排序顺序进行自动排序。map类提供了一系列的成员函数,其中包括begin()和end()函数,用于获取指向map容器中第一个元素和最后一个元素之后位置的迭代器。
2023-08-23 14:54:00
5170
原创 stat()/lstat()的使用
stat()函数和lstat()函数都是用于获取文件或目录的信息的函数,它们可以返回包含文件或目录的各种属性的结构体。
2023-08-23 14:45:21
530
原创 删除某一指定文件夹的实现方案
该方式自动检查当前目录是否存在指定的文件夹,存在则删除,不存在不会返回失败。对于编译选项不需要指定,并且可删除root权限下的文件夹。不需要修改程序权限。并且,通过该方式,再删除文件夹时,会因为root的权限问题引起删除失败。先判断当前文件夹是否存在,后调用接口删除,但是会由于权限问题删除失败。没有编译选项指定,但是对于文件的root权限会删除失败。1、调用dirent.h实现。3、调用cstdlib.h。2、调用unistd.h。4、调用fs系统删除。
2023-08-21 16:39:32
187
原创 C++ 信号处理
这个函数接收两个参数:第一个参数是要设置的信号的标识符,第二个参数是指向信号处理函数的指针。函数返回值是一个指向先前信号处理函数的指针。如果先前设置的信号处理函数为 SIG_IGN,则返回值为 SIG_IGN。在这里,sig 是要发送的信号的编号,这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。不管您想在程序中捕获什么信号,您都必须使用 signal 函数来注册信号,并将其与信号处理程序相关联。
2023-08-11 16:16:13
131
原创 is_base_of的特性
我们使用 std::is_base_of 检查 Derived 是否是 Base 的基类。第二次检查返回 false,因为 Base 并不是 Derived 的基类。std::is_base_of 提供了一个编译时的布尔值,指示第一个指定的类型是否派生(或是严格基类)自第二个指定的类型。总结来说,std::is_base_of 是一个类型特性,用于判断一个类是否是另一个类的基类。std::is_base_of 是 C++ 标准库中的一个类型特性(Type Trait),用于判断一个类是否是另一个类的基类。
2023-08-10 17:30:19
1128
原创 std::function<…>的使用
std::function 是 C++ 标准库中的一个模板类,用于封装可调用对象(函数、函数指针、函数对象、Lambda 表达式等)的通用接口。它可以用于实现函数的类型擦除和运行时多态。使用 std::function 的一般步骤如下:这里的 return_type 是函数的返回类型,arg_types 是函数的参数类型。这里的 args 是调用时传递给函数的参数。在上面的示例中,我们首先将 func 赋值为 add 函数,然后调用 func(3, 4) 输出结果 7。
2023-08-10 17:26:12
437
原创 git常见命令总结
请将 <remote_name> 替换为远程仓库的名称,通常为 origin。将 <branch_name> 替换为要删除的分支的名称。该命令用于删除已经合并到当前分支的其他分支。如果分支未经合并(例如,未提交的更改仍存在于分支中),则使用此命令会引发警告并拒绝删除。当涉及到删除 Git 分支时,有两个常用的命令可以使用:git branch -d 和 git branch -D。该命令用于强制删除指定的分支,无论该分支是否已经合并到当前分支。执行上述命令后,Git 将会删除远程仓库中的指定分支。
2023-08-10 16:57:31
83
原创 enable_if的用法
std::enable_if是C++标准库中的模板类,用于在编译时根据条件选择模板重载或禁用特定函数。std::enable_if的基本用法是在函数模板的返回类型中使用它,并结合类型特性进行条件判断。如果条件成立,返回类型将为指定类型,否则,该重载将被禁用。
2023-08-10 10:40:08
420
原创 V2X技术
V2X(Vehicle-to-Everything)技术是指车辆与周围所有事物之间的通信技术,包括车辆与其他车辆(V2V)、车辆与基础设施(V2I)、车辆与行人(V2P)以及车辆与网络(V2N)之间的通信。V2X技术的主要目标是提高道路交通的安全性、效率和环境友好性。这样的信息交互可以使车辆和驾驶员更好地了解道路状况,提供实时的警报和警示,从而减少事故风险,增强驾驶员的意识和决策能力。通过与其他车辆、基础设施和行人之间的通信,自动驾驶车辆可以获取更加全面和准确的环境感知信息,做出更加可靠和智能的决策。
2023-07-07 16:23:02
1634
原创 自动驾驶汽车整体架构(整理)
自动驾驶汽车的整体架构涉及多个组成部分和技术,包括感知系统、决策与规划系统、控制系统和用户界面。下面是对每个组成部分的概述:1.感知系统:自动驾驶汽车通过感知系统获取环境信息。该系统通常包括各种传感器,如雷达、摄像头、激光雷达和超声波传感器。这些传感器能够感知车辆周围的物体、道路标志、车道线和行人等。感知系统收集的数据用于建立对车辆周围环境的精确模型。2.决策与规划系统:决策与规划系统使用感知系统提供的数据,进行场景理解和决策制定。
2023-07-07 16:19:07
7442
1
原创 CAN总线技术
CAN(Controller Area Network)总线是一种串行通信协议,主要用于实现分布式控制和通信的系统。它最初是为汽车电子系统设计的,但现在已广泛应用于工业自动化、船舶、飞机等领域。
2023-07-05 17:37:03
463
原创 自动驾驶技术与行业发展现状
因此,推动自动驾驶技术的发展需要加强安全标准和监管,同时进行相关宣传和教育,提高公众对于自动驾驶技术的认知和接受度。总的来说,自动驾驶技术的发展已经取得了显著的进展,商业化应用逐渐扩大,但仍面临技术、法律和社会等多方面的挑战。随着技术的不断推进和社会环境的变化,自动驾驶技术将会进一步发展和成熟,为未来的交通方式和城市交通带来重大变革。自动驾驶技术是指利用感知器件、决策算法和执行器件等技术,使车辆能够在没有人类驾驶员操控的情况下进行行驶和操作的技术。目前,自动驾驶技术的发展已经取得了一些重要的里程碑。
2023-07-05 17:27:09
704
原创 多线程以及线程池
生产者消费者问题是一个经典的并发编程问题,涉及到多个生产者线程和消费者线程对一个共享的缓冲区进行访问。通过使用线程池,可以有效地利用线程资源,并提供对任务调度和线程管理的控制。线程池可以提高线程的创建和销毁效率,并限制同时运行的线程数量,从而避免资源竞争和过度开销。这只是一个简单的线程池示例,实际应用中可能还需要考虑任务的优先级、线程池的最大线程数、任务队列的大小等其他因素。在main函数中,我们创建了两个生产者线程和两个消费者线程,并分别调用join()函数等待线程的结束。
2023-07-03 18:07:00
260
原创 互斥锁 条件变量
需要注意的是,std::lock_guard是一种独占锁的方式,它使用的是std::mutex(互斥锁)而不是std::shared_mutex(共享互斥锁)。如果需要在多个线程之间共享锁,需要使用std::shared_lock或std::unique_lock来代替std::lock_guard。当创建std::lock_guard对象时,需要传递一个互斥锁对象作为参数。异常安全:std::lock_guard对象在构造时获取互斥锁,无论是否有异常,它的析构函数都会被调用来释放互斥锁,确保异常安全性。
2023-07-03 18:03:14
376
原创 生产者消费者模式
生产者-消费者模式可以有效地解决多线程环境下的数据共享和同步问题,提高系统的吞吐量和资源利用率。实现生产者-消费者模式时,可以使用互斥锁(mutex)和条件变量(condition variable)来实现线程之间的同步和通信。生产者-消费者模式是一种常见的并发编程模式,用于解决多线程环境下的数据共享和同步问题。在实际应用中,可以根据具体的需求和设计选择不同的数据结构作为缓冲区,例如队列、栈或循环缓冲区等。有一个共享的缓冲区,用来存储生产者产生的数据或任务。当缓冲区为空时,消费者必须等待数据的产生。
2023-07-03 18:02:15
201
原创 自动驾驶概述
自动驾驶,也被称为无人驾驶或自动驾驶汽车,是指能够在没有人类干预的情况下自主地感知环境、决策和控制车辆行驶的技术和系统。它利用传感器、计算机视觉、人工智能和机器学习等技术来模拟人类驾驶员的决策过程,实现车辆的自主导航和安全驾驶。自动驾驶技术的发展受益于多个关键技术的突破:传感器技术:自动驾驶汽车配备了多种传感器,包括激光雷达(LiDAR)、雷达和摄像头等,用于感知周围环境,获取道路、车辆和行人等信息。
2023-07-03 18:00:44
490
原创 Autoware平台架构及设计
官网:https://autoware.org/autoware-overview/gitlab仓库:https://github.com/autowarefoundation/autowaregithub仓库:https://github.com/autowarefoundation/autoware.universe。
2023-06-30 17:33:27
1541
原创 ros操作系统简介以及自动驾驶平台
ROS(Robot Operating System,机器人操作系统)是一个开源的、灵活的操作系统框架,专门用于构建机器人软件。它提供了一系列的库、工具和组件,用于支持机器人应用程序的开发、执行和协作。以下是ROS操作系统的一些核心特点和功能:1.分布式架构:ROS基于分布式架构,允许机器人系统中的不同模块和节点通过通信机制进行消息传递和数据共享。这种分布式架构使得开发者可以将复杂的机器人系统划分为多个独立的模块,通过ROS进行协作开发和集成。
2023-06-30 17:00:08
2738
1
原创 Apollo平台计算框架CyberRT
有向无环图(DAG)有向无环图(Directed Acyclic Graph,DAG)是一种由一组顶点和它们之间的有向边构成的有向图,其中不存在任何环路。在有向无环图中,每条边都有一个方向,表示从一个顶点指向另一个顶点,而且不存在回到原始顶点的路径,也就是没有形成环的路径。这个特性使得有向无环图在很多应用中非常有用。有向无环图可以用于建模和解决多种问题,例如:1.任务调度:图中的顶点可以表示任务,有向边表示任务间的依赖关系。
2023-06-30 16:43:21
3682
2
原创 ros publish subscribe service client的用例
在以上代码中,我们使用了ROS的C++ API和std_msgs/String消息类型。它包含一个发布者和一个订阅者。发布者每秒发送一个包含字符串数据的消息到名为"my_topic"的话题上。将以上代码保存为一个C++文件(例如publish_subscribe_example.cpp),并在ROS环境中进行编译和运行。请确保你已经安装了所需的ROS包和依赖项,并使用catkin_make编译你的ROS工作空间。注意:请将<your_package_name>替换为你的ROS包的名称。
2023-06-30 10:13:59
100
原创 ros 工作空间 功能包
在ROS(机器人操作系统)中,工作空间(workspace)是用于组织和构建ROS功能包的目录结构。功能包(package)是ROS的基本组织单元,它包含了一组相关的文件和代码,用于实现特定的功能。工作空间是一个目录,通常是一个版本控制系统的根目录,用于存放一个或多个功能包。在工作空间目录下,src目录是存放功能包的地方。您可以在src目录下创建一个或多个功能包,每个功能包都有自己的目录,其中包含了一些必要的文件和目录,如源代码、配置文件、编译脚本等。
2023-06-30 10:05:02
757
原创 ROS通信机制
RPC调用将远程节点的服务请求封装在本地节点的函数调用中,通过网络将请求发送给远程节点,远程节点接收请求并执行相应的服务逻辑,然后将结果返回给本地节点。在ROS中,要使用服务通信,你需要创建一个服务客户端节点和一个服务服务器节点。服务客户端节点通过调用ROS的服务客户端接口发送请求到指定服务上,而服务服务器节点通过调用ROS的服务服务器接口接收请求并处理,最后发送响应。2.客户端-服务器架构:服务客户端节点发送请求到服务服务器节点,服务服务器节点接收请求并进行相应的处理,最后发送响应给服务客户端节点。
2023-06-28 18:18:22
2265
原创 ros架构
ROS(Robot Operating System)是一个灵活的、分布式的系统架构,用于构建机器人软件。它由一系列工具、库和约定组成,提供了一套通用的功能和通信机制,以支持机器人系统的开发、部署和运行。ROS架构主要包括以下几个核心概念和组件:1.节点(Nodes):ROS中的节点是独立运行的进程,是软件模块的最小单元。节点可以是传感器驱动程序、控制器、算法节点等,它们通过ROS的通信机制相互交互和通信。2.主题(Topics):主题是节点之间进行发布-订阅通信的通道。
2023-06-28 17:43:05
2050
原创 ROS简介
在ROS中,有许多重要的模块和组件,用于实现不同功能和提供不同服务。下面是ROS的一些核心模块的详细介绍:1.roscore: roscore是ROS的核心节点,它提供了整个ROS系统的基础功能。roscore负责管理参数服务器、运行时图和消息传递,运行它是使用ROS的第一步。2.roslaunch: roslaunch是一个用于启动和管理ROS节点的强大工具。它可以通过一个XML格式的启动文件同时启动多个节点,还可以设置节点参数、命名空间和运行时选项等。
2023-06-28 17:03:58
18240
原创 int转换为string的所有方法
这种方法适用于将整数转换为字符串,使用std::stringstream对象将整数写入,然后从std::stringstream对象中提取字符串。这种方法适用于将整数转换为字符串,使用std::to_chars()函数将整数转换为对应的字符数组,然后通过字符数组构造字符串。这种方法适用于将单个整数转换为字符串,使用std::to_string()函数将整数转换为对应的数字的字符串形式。方法三:使用std::to_chars()函数(C++17及以上)方法一:使用std::to_string()函数。
2023-06-28 15:43:46
36056
1
原创 unsigned char 与string之间的转换
这种方法适用于将无符号字符数组转换为字符串,使用std::stringstream对象将每个无符号字符逐个写入,然后从std::stringstream对象中提取字符串。这种方法适用于将单个无符号字符转换为字符串,使用std::to_string()函数将无符号字符转换为对应的ASCII码数字的字符串形式。这种方法适用于将无符号字符数组转换为字符串,使用字符数组存储数据,然后使用字符数组构造字符串。方法一:使用std::to_string()函数。方法三:使用字符数组和std::copy()
2023-06-28 15:39:00
7098
原创 iceoryx和它的零拷贝技术
Iceoryx的零拷贝技术是为实时应用而设计的,特别适用于需要高性能和低延迟的嵌入式系统。具体来说,Iceoryx使用共享内存进行进程间通信,将数据放置在共享内存区域,然后通过指针引用来实现数据的传递,避免了数据的额外复制。传统的数据拷贝需要涉及CPU的复制操作,而零拷贝避免了这一步骤,可以更高效地利用CPU资源。其次,零拷贝减少了内存的占用,因为数据不需要在不同的缓冲区之间复制,可以直接在原始缓冲区中进行操作。最后,零拷贝提供了更低的传输延迟,因为数据可以直接传递,而不需要复制的等待时间。
2023-06-28 14:28:23
874
原创 自动驾驶的通信中间件以及平台介绍
NNG的设计目标是简化消息传递的开发,提供高性能和可靠性的通信机制。它们帮助实现车辆内不同控制单元之间的数据交换和协同,支持实时性、可靠性和安全性的通信需求,促进了汽车电子系统的功能扩展和创新发展。4.控制模块(Control):控制模块根据规划模块生成的行驶轨迹,计算车辆的控制指令(如油门、刹车、转向等),并通过车辆的执行器(如电机、制动器、转向器等)实施这些指令。它采用了轻量级的消息模式,包括请求-应答、发布-订阅、推送-接收等,并支持多种传输协议,如TCP、UDP、in-process等。
2023-06-28 14:27:01
2152
原创 通过ifstream读文件内容
在读取文件内容时,通过read函数可以实现对文件字节的读取,如果想要读取全部内容,需要知道文件内部存储的文件的大小,所以,在读取文件之前,需要对文件内部数据大小进行计算,通常通过指针末尾位置来判断内容的大小,即通过seekg()以及tellg()来计算。
2023-06-28 13:49:34
2050
原创 ifstream中函数tellg()与seekg()
在操作文件读写过程中,有时候会访问某一位置的字节以及文件大小,或者操作文件指针进行指定位置的访问,或者想回退某个字节的位置。可以使用tellg()和seekg()。
2023-06-28 13:36:05
1904
原创 rocksdb 备份backup
备份接口BackupEngine是管理备份数据库目录的对象,具有创建、还原、删除和检查备份数据库的功能。磁盘格式特定于 BackupEngine,因此 (a) 即使没有硬链接,也可以在备份之间共享文件,并且 (b) 额外的元数据可以与备份相关联,以实现数据完整性和其他目的。C++ API 位于(不幸的旧名称)中。include/rocksdb/utilities/backupable_db.hBackupEngine 的一个关键功能是将备份从一个抽象到另一个抽象,例如从本地文件系统到不是通过操作系统抽象
2023-05-12 11:22:46
694
原创 rocksdb的wal配置
DBOptions::manual_wal_flush确定 WAL 刷新是在每次写入后自动还是纯手动(用户必须调用才能触发 WAL 刷新)。DBOptions::wal_dir设置 RocksDB 存储预写日志文件的目录,该目录允许将 WAL 存储在与实际数据不同的目录中。数据库::WAL_ttl_seconds, 数据库::WAL_size_limit_MB。数据库::max_total_wal_size。数据库::wal_filter。
2023-05-10 16:24:24
605
原创 rocksdb的设置选项和基本调整
除了在 RocksDB 上使用基本操作编写代码外,您可能还对如何调整 RocksDB 以实现所需的性能感兴趣。在本页中,我们将介绍如何进行初始设置,该设置应该足以满足许多用例的需求。RocksDB 有许多配置选项,但其中大多数可以被许多用户安全地忽略,因为它们中的大多数都是为了影响非常特定的工作负载的性能。对于一般用途,大多数 RocksDB 选项可以保留为默认值,但是,我们建议在下面使用一些选项,每个用户都可能希望尝试使用常规工作负载。
2023-05-10 15:39:51
1255
原创 rocksdb的原子flush
如果始终启用 WAL,则无需使用原子刷新选项。启用 WAL 后,单个 WAL 文件用于捕获对所有列族的写入;因此,恢复的数据库(通过在崩溃/恢复路径中重播 WAL 日志)保证在所有列系列中保持一致。启用/禁用原子刷新作为数据库选项很容易。对于自动触发的刷新,RocksDB 以原子方式刷新所有列族。
2023-05-10 14:38:15
213
01_C_C++_allCodes.rar
2020-06-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人