C++知识点总结-hirain实习记录

Win11上从零跑通Carla自动驾驶仿真:保姆级环境配置与避坑指南(Python 3.7+) 本文详细介绍了在Win11系统上从零配置Carla自动驾驶仿真环境的完整流程,包括Python 3.7+环境搭建、依赖安装、常见问题排查及性能优化技巧。通过保姆级教程帮助开发者快速避坑,实现稳定的自动驾驶仿真测试环境部署。 阅读详情

Linux相关:

  • find . -name "*.c"来寻找在本文件夹下所有.c类型的文件。
  • 在.sh脚本后面加 & 表示该脚本在后台运行。
  • 一个大的项目的启动可以写多个.sh脚本,在最外层调多个.sh脚本并使其运行在后台 &,这样可以让多个.sh并行。在最后使用wait等待多个.sh运行同步。
  • 使用if可以完成在shell脚本中的判断,将条件放置在中括号中,例如
    if [ $(lsof -i udp:10020 -t) -gt 0 ];then
    sudo kill -9 $(lsof -i udp:10020 -t)
    fi
  • 可以实现kill占用10020端口的进程。
  • linux.sh脚本中#!/bin/bash和#!/bin/sh脚本是两种脚本,后者没有source命令。
  • ping -c 后面可以指定ping的次数。

C++相关:

  • 条件编译和宏编译:
    • #if 1 和 #endif 可以来进行条件编译,判断1这个位置的表达式的值是否为真。
    • 条件编译选项 #ifdef [] 和 #endif 是检测是否有 [] 内的标志被 #define。
    • 其中一些 #define [] 是一些空define,但是可以作为类似Java中注解的作用。
  • C++ 中的结构体也有this关键字,但是其类型为指针,可通过this->来取出内的成员。在构造函数赋值时用处很大。
  • 函数指针的定义为:[返回类型] (* [函数名]) ([型参])。
  • typedef int (*fPointer)(void); 定义的是一个函数指针。这样我们就可以使用 fPointer 来定义一个函数指针。比如我们使用 fPointer fp 声明函数指针就如同使用 int (*fp)(void) 来声明。
  • (void *) data 定义的是一个void类型的指针,void 指针可以指向任意类型的数据,就是说可以用任意类型的指针对 void 指针赋值
  • 使用extern关键字:
    • 引用同一个文件中的变量,若变量在使用处后定义,会出现变量未定义的报错。这样就可以定义extern [变量定义]放在该变量使用之前。这样就提前声明了该变量在本文件的其他地方进行了声明,让编译器去后面自己找。
    • extern还可以引用其他文件中的变量,这样不用include对所有的变量和函数进行一个引入。而是引入了在别的文件中定义的一个全局变量。
    • extern的真实场景中的作用是对一些保密算法进行一些隐藏。只在头文件中进行extern。但是真实的定义是在隐藏的.so文件中。
  • 头文件更多的是给别人看的,说明行文档。对于计算机来说没有什么作用。
  • 当多个文件进行集成的时候,可能会出现typedef冲突,解决方法是在出现冲突的头文件上下使用#define uint8 [项目]_uint8 #undef 进行包裹,这样在包裹范围内的代码会对重复的uint8等冲突的类型进行宏定义全局替换,就避免了冲突的发生,是一种十分巧妙使用宏定义的方法。
  • Cmakelist是简化cmake的一个工具性文件。其中.so作为动态连接文件可以放在link_directories中进行声明,但是可能会从出现的问题是link_directories中的文件顺序会影响链接的结果,如果顺序不对可能出现依赖不能链接正确的问题。
  • Cmakelist中比较重要的需要修改的几个参数有:
    • include_directories(这个里的路径是头文件地址,扫描后获得所有的头文件)
    • link_directories(这个是链接库的地址,如果有so等库文件需要将地址在这里声明)
    • add_executable(这个是参与编译的cpp需要在这里面声明)
    • add_library
    • target_link_libraries(这个负责链接相关的配置,so等链接库文件需要在这里声明,同时需要注意顺序问题,)
  • C++中的一个经典库为Boost库,是在C++标准的基础上添加了一些常用功能。可以参考官方文档:http://zh.highscore.de/cpp/boost/
  • 在处理单个文件中执行顺序问题时,可以加简单的锁来实现,即定义几个信号量,通过volatile来实现简易的锁,但是这样的锁的信号量是在同一个工程内的,若跨工程会导致内存无法跨进程进程访问,这样可能需要进程间通信来解决。
  • 同一工程内跨文件访问变量大部分都可以通过extern关键字来实现,即全局变量可通过extern来寻找到。
  • 在工程设计上,能简单就别太复杂。
  • 减少耦合的方法常常是把文件拆解出来,将一个大文件拆成多个功能文件。同时公共的变量可以单独放到.h文件中,这样引用可以最大程度减少冲突。
  • 全局变量可以在名称定义前加上一个g来进行区分,也更容易识别。
  • C++中的锁std::mutex
    • 申请一个std::mutex类型的变量之后,该变量中lock()方法会尝试给该线程上锁,若获取锁不成功将会将该线程阻塞。在执行完成后,使用unlock()方法释放锁,不然会可能出现死锁。
    • std::mutex是可能出现死锁的不太安全的锁,因为为当该类型的锁上锁之后在后续中该线程抛出error会导致锁一直不会释放,出现死锁。解决方法是使用更加安全的锁类型。
    • std::mutex中的try_lock()方法会尝试上锁,并返回一个bool类型,来告诉是否获取锁成功。
    • std::mutex可以在一个进程中多个线程间保持同步。
  • 如果不想要使用比较重的锁的话可以使用一个共享的bool信号量和置true,false并在加锁区域之前进行while循环判断等待来实现。
  • 在面向过程编程中一个很重要的一个关键字就是extern。该该关键字类似面向对象编程中的多态实现了多个文件共享函数的操作,实现功能模块的拆分。
  • 很多项目和工程中,一些公共代码需要重复使用,这些代码会被编译成库文件,库文件包括静态库和动态库文件两种。在windows平台下,静态链接库是.lib文件,动态库文件是.dll文件。在linux平台下,静态链接库是.a文件,动态链接库是.so文件。
  • 常见的构建系统
    • CMake:是一个跨平台构建系统生成器。项目使用独立于平台的文件指定其生成过程。用户通过使用CMake为其平台上的本机工具生成构建系统来构建项目。
    • Python setuptools:是Python包的打包常用工具。Python 包使用文件来描述依赖项,以及如何构建和安装内容。在ROS2中,功能包可以是“普通”Python包,而在ROS1中,任何Python功能都是从CMake文件触发setup.py进行打包。
    • catkin:基于CMake,并提供了一组方便的函数,使编写CMake包更容易。它自动生成 CMake 配置文件以及 pkg 配置文件。它还提供了注册不同类型测试的函数。
  • 常见的构建工具
    • catkin_make:该工具仅调用 CMake 一次,并使用 CMake 的函数在单个上下文中处理所有包。虽然这是一种有效的方法,因为所有包中的所有目标都可以并行化,但它具有明显的缺点。由于所有函数名称、目标和测试都共享一个命名空间,并且规模更大,这很容易导致冲突。
    • colcon:是一个命令行工具,用于改进构建,测试和使用多个软件包的工作流程。它自动化了流程,处理了订购并设置了使用软件包的环境。
    • ament_tools:由用于构建 ROS 2 包的独立 Python 3 包提供。它是为引导ROS 2项目而开发的,因此仅针对Python 3,并且可以在Linux,MacOS和Windows上运行。
  • 对于函数传参来说,传指针是最好的方法,因为这样不会进行拷贝工作,节省了时间和空间,但是指针操作常常可能出现危险,这样使用const int & x作为形参会更加好,因为这样的形参定义是一个x的引用,也不会出现拷贝,同时const int 保证x是一个常量,不会在函数内发生修改。
  • C++中的thread的join操作其实只是在阻塞main线程的结束,在一个thread初始化时就开始执行了,只不过join是防止main线程未等待子线程执行完毕后就退出,将main线程阻塞。
  • 同时线程的join操作是保证等待该线程执行完毕后在进行该线程join之后的语句。

宝藏链接

https://vuepress.mirror.docker-practice.com/introduction/what/ Docker学习
http://fishros.org:5000/ 自动文章封面生成

基于matlab的图像HOG特征提取算法仿真 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。 阅读详情

相关推荐

具身智能落地实战:制造业、物流与电力的工业级方案设计

具身智能是一种融合感知、推理与物理执行的智能范式,其核心在于构建具备因果建模能力、多模态闭环反馈和实时动作规划的行动主体。区别于通用AI或传统自动化,它依托多模态大模型、高精度力觉/触觉传感及Sim2Real仿真技术,实现对真实物理环境的深度理解与自适应交互。技术价值体现在可解释性决策、毫秒级跨模态协同与零停机容错能力,已规模化应用于制造业质检、物流破损鉴定、电力绝缘子巡检等强约束工业场景。本文聚焦‘行业应用方案解决方案’这一高频搜索需求,系统拆解从工位筛选、分层架构设计到72小时现场交付的全链路工程方法论

weixin_30952479的博客 300

ROS学习记录-hirain实习记录

ROS1相关内容:

个人博客dicemy.com 318

VS2022离线安装总闪退?可能是这个--noWeb参数没加对(完整参数指南)

本文深入解析了VS2022离线安装过程中常见的闪退问题,指出核心原因往往在于命令行参数使用不当,特别是`--noWeb`参数。文章提供了完整的参数使用指南和实战解决方案,包括证书处理、安装器文件修复及自动化脚本,帮助用户彻底解决离线部署中的验证失败与闪退难题。

weixin_28842269的博客 758

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 236

STM32_WS2811驱动

STM32的WS2811驱动

健身房 2840

【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 4590期】

基于matlab蚁群算法机器人栅格地图最短路径规划 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1276

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 220

【AI智能体】Codex AI 辅助编程高级技能实战操作详解

Codex AI 辅助编程高级技能实战操作详解

congge 6757

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 388

【毕设救星】从0到1打造YOLOv8货架商品检测与可视化系统,让你的毕设脱颖而出

本文介绍了一个基于YOLOv8的货架商品检测系统毕设项目。系统采用YOLOv8模型进行商品检测,包含环境搭建、数据集准备、模型训练与验证等完整流程,并开发了可视化UI界面。项目聚焦智能零售应用场景,技术栈完整且易于实现,适合作为计算机视觉方向的毕业设计。文章详细指导了从数据标注、模型训练到界面开发的全过程,提供代码示例和实用建议,帮助学生快速完成毕设并提升答辩表现。

LXY_LOVE36的博客 103

uniapp - 实现 App 端 “半屏幕“ 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程

uniapp app端实现半屏幕扫码,uniapp 扫一扫半个屏幕,uniapp 扫一扫,uniapp持续扫码实现,uniapp怎么自定义扫码和连续扫码,uni-app App端半屏连续扫码,uniapp 扫一扫半个屏幕,uniapp自定义扫码页面样式,实现连续扫码功能(uniapp),uniapp - 实现 App 端 "半屏幕" 连续扫码功能,页面只有半个屏幕是扫码框并且可持续连续扫码获取数据(不使用官方 uni.scanCode API,因为无法连续扫码!)详细示例源码插件教程。

✅ 精选推荐文章 1万+

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 334

Web3:Ubuntu系统 使用Docker-compose方式部署blockscout浏览器&配置版本-v5.2.3-beta+charts图表

详细介绍了在Ubuntu 23.04系统上部署Blockscout浏览器的步骤,以及过程中遇到的问题进行一一解决。

鄙人kunzhi96,感恩遇见! 2万+

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 377

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 343

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 303

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 436

#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)

数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。

lwq20051110的博客 200

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 366

【C++】【STL】string_OJ题

本文总结了9道C++ STL中关于string的OJ题目,按操作类型分为三组:反转与就地修改(如917、541、151)、计数与查找(如387、125、58)、模拟与大数运算(如415、43、8)。核心技巧包括双指针收敛、字符分类处理、进位控制及边界值处理。所有题目使用同一套源码,在标准库std::string与自定义容器MyString间切换仅需宏定义,验证结果一致性。代码通过随机测试用例与Trace函数逐行比对,确保逻辑正确性,强调接口对齐的重要性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 4370

【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针

C++类与对象知识(面向过程和面向对象的初步认识,类的初步认识,类的访问限定符及封装,类的作用域、实例化,类的对象模型,this指针)

2601_96587588的博客 876

【C++ 基础入门】C++继承(下):问题、底层原理与组合

C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)

2601_96587588的博客 767

C++09_vector类复习

本文以10个核心问题为主线,系统解析C++ vector的底层机制:从基本概念、初始化方式、遍历方法,到size与capacity的区别、扩容策略(VS 1.5×,g++ 2×)、reserve与resize差异、中间增删的挪动原理、迭代器失效原因,直至二维vector的内存布局(含三指针结构)。通过“先会用、再懂扩容、最后看清对象结构”的递进逻辑,揭示vector作为动态数组的本质——连续内存、自动扩容、随机访问高效,但插入删除代价高,迭代器易失效。全文深入浅出,助读者摆脱“黑盒”认知,真正掌握其内存图景

lemo_n_的博客 337

cargo bench 快速上手

是 Rust 内置的基准测试命令,用于。不过,Rust 标准库的#[bench]属性目前仅在版本可用,因此在稳定版(stable)上,社区标准做法是使用框架。

Doublelv 的博客专栏。 339

C++零基础入门第3周:if/else、switch、for/while/do-while 控制流完全指南(附20段可运行代码+避坑清单)

第3周 · 控制流1. 分支:if/else2. 分支:switch3. 循环:for4. 循环:while / do-while5. 范围 for(C++11)6. 跳转:break/continue/return/goto7. 现代 C++ 分支特性避坑:悬空 else / 浮点比较避坑:忘 break / 作用域避坑:边界 off-by-one避坑:do-while 至少执行一次避坑:遍历时修改容器避坑:goto 破坏结构if constexpr / if consteval本周项目:猜数字游戏 #m

qq_58662768的博客 213

《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试

本文系统完成了Gemini模型通过OpenAI兼容API的接入开发,基于Apifox验证接口规范,设计并实现GeminiProvider类,涵盖初始化、状态检测、全量响应等核心功能。重点处理了代理配置强制校验、Bearer鉴权、JSON序列化与响应解析等工程细节,并通过GTest与CMake完成单元测试,验证链路可用性。项目遵循策略模式,保持与DeepSeek、ChatGPT等模型的统一抽象接口,显著提升SDK可扩展性。

2501_91275995的博客 385
上一篇: Java_SSM入门-Java从0到1学习指南(2)
下一篇: ROS学习记录-hirain实习记录
TobinMEng
博客等级 码龄9年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值