- 博客(159)
- 收藏
- 关注
原创 简单介绍C++中 string与wstring
C++中string和wstring是处理不同字符编码的字符串类型。string基于8位char,常用于ASCII或UTF-8编码,内存占用紧凑;wstring基于宽字符wchar_t,Windows下为UTF-16,其他平台可能为UTF-32。关键差异包括字符宽度、Unicode支持方式及平台兼容性。现代开发推荐优先使用string处理UTF-8,Windows API交互等特定场景才用wstring。C++11新增了u16string/u32string等类型提供更明确的Unicode支持。选择时需考虑
2025-06-09 20:26:43
728
原创 简单介绍C++中线性代数运算库Eigen
Eigen 是一个高性能的 C++ 模板库,专注于线性代数、矩阵和向量运算,广泛应用于科学计算、机器学习和计算机视觉等领域。以下是对 Eigen 库的详细介绍:
2025-05-16 09:17:32
713
原创 简单说明.nii.gz文件数据结构
NIfTI(Neuroimaging Informatics Technology Initiative)的.nii.gz文件是医学影像领域(如MRI、CT等)广泛使用的数据格式,其本质是NIfTI格式文件(.nii)通过gzip压缩后的版本。
2025-05-08 17:08:11
766
原创 详细解释C++ 泛型模板中的完美转发(Perfect Forwarding)
完美转发是 C++ 模板编程中的一项重要技术,它允许函数模板将其参数地转发给其他函数,保持参数的(左值/右值)和不变。这是实现通用包装函数、工厂模式等高级功能的基础。
2025-04-30 13:41:21
376
原创 详细介绍C++中指针解引用
指针:存储内存地址的变量。解引用:通过指针访问或修改该地址处的实际数据。操作符:使用运算符解引用指针。指针解引用是直接操作内存的核心机制,正确使用时能提升效率,错误使用则会导致严重问题。解引用前必须确保指针有效(非空、未悬垂)。理解指针类型与目标类型的匹配关系。现代 C++ 中优先用智能指针和引用替代裸指针。
2025-04-30 11:30:48
399
原创 详细说明c++函数传参常量引用const T&传递和值传递的区别
数据类型推荐传递方式原因内置类型(intfloat直接传值拷贝成本低,传引用可能降低性能STL 容器/const T&避免深拷贝开销自定义类对象const T&(除非小型且拷贝成本低)平衡安全性和性能指针类型const T*或T*明确是否修改指向的数据智能指针按语义选择(见上文)区分所有权和观察者角色函数对象或传值取决于是否需要存储小型结构体(如Point直接传值拷贝成本可能低于间接访问。
2025-04-30 11:17:40
553
原创 解释一下计算机中的内存对齐
内存对齐是底层编程中提升性能与稳定性的关键机制,通过合理布局数据、显式控制对齐,可避免未对齐访问导致的性能损失或错误。理解并应用对齐规则,可优化数据结构、提升代码可移植性,尤其在跨平台和高性能计算场景中尤为重要。场景中尤为重要。
2025-04-25 11:18:18
712
原创 计算机存储数据的顺序——小端(Little-Endian)与大端(Big-Endian)
字节序(Endianness)指计算机在内存中存储多字节数据(如整数、浮点数)时的字节顺序。当数据超过1字节(如16位、32位或64位数值)时,字节序决定了这些字节是如何排列的。大端模式(Big-Endian):高位字节(Most Significant Byte, MSB)存储在低地址,低位字节(Least Significant Byte, LSB)存储在高地址。小端模式(Little-Endian):低位字节(LSB)存储在低地址,高位字节(MSB)存储在高地址。大端(Big-Endian)
2025-04-25 10:39:02
1026
原创 简单说明一下用于3D打印的.stl文件
stl文件是用于3D打印和计算机辅助设计(CAD)的一种标准化文件格式,其全称为**“Stereolithography”(立体光刻)三角网格(三角形面片)**描述三维模型的几何形状,是目前3D打印领域最常用的文件格式之一。
2025-04-25 09:58:50
1074
原创 医学图像(DICOM数据)读取及显示(横断面、冠状面、矢状面、3D显示)为什么用ITK+VTK,单独用ITK或者VTK能实一样功能吗?
在医学图像处理中,结合使用和是常见的做法,因为它们各自专注于不同的核心功能。
2025-04-24 15:08:40
1072
原创 C++/Qt中QActionGroup类用法
QActionGroup 提供了一种高效管理相关动作的方式,尤其适用于需要互斥选择的场景。通过统一的状态控制和信号机制,开发者可以简化代码并提升用户体验。
2025-04-24 10:41:23
491
原创 用cython将python程序打包成C++动态库(windows+Vistual Studio2017平台)
作为一名程序员我们都知道Python的库可能要比C++的丰富的多特别是在算法方面,但是有的时候我们的工程是用C++开发的,我们又像用Python的这个库那怎么办呢?如果直接调.py程序,工程中代码有.py又有.cpp显得工程很杂乱。那么我么可以借助cython来帮助我们将python程序封装成C++动态库。最近正好用到jieba分词工具,接下来让我们基于结巴一起探讨如何完成python程序封装成C++库。
2025-04-17 20:44:37
538
原创 Windows平台用vistual studio 2017打包制作C++动态库
添加头文件():添加源文件():2.2示例:静态库 (LIB)静态库不需要导出宏(直接包含完整代码):3. 配置项目属性设置导出符号(仅动态库需要):右键项目 → 属性 → C/C++ → 预处理器 → 预处理器定义。添加 (确保动态库项目导出符号)。调整输出目录(可选):右键项目 → 属性 → 常规 → 输出目录,设置为 。确保生成目标类型:检查 配置类型(属性 → 常规 → 配置类型)应为 或 。4. 编译生成库选择 生成 → 生成
2025-04-17 19:47:48
1183
原创 详细说明C/C++ 中编译器指令#pragma once
从而避免因多次包含同一头文件导致的编译错误(如重复定义、类型冲突等)。#pragma once` 是 C/C++ 中的一种。:确保一个头文件在同一个编译单元(如。用一行代码直接实现相同功能。
2025-04-11 10:07:56
368
原创 C++实现对象单例模式
如果需要继承或更复杂控制,可以考虑智能指针实现。避免在单例析构函数中引用其他可能已被销毁的单例。在程序结束时,静态实例会由系统自动销毁。
2025-04-03 19:53:48
392
原创 详细介绍一下C++中的extern关键字
核心作用:跨文件共享数据或函数,避免重复定义。关键规则extern是声明而非定义(不分配内存)。使用extern "C"兼容C代码。全局变量需在头文件中用extern声明,在源文件中定义。常见错误头文件中直接定义全局变量(导致重复定义)。忘记在某个源文件中提供extern变量的定义(链接错误)。合理使用extern可以提升代码的模块化,支持多文件协作,但在复杂项目中需谨慎管理全局变量,避免引入难以维护的依赖。
2025-04-02 21:37:36
1092
原创 详细介绍一下C++的按位运算
运算符用途示例掩码、清零位设置位`flagsFLAG_A`翻转位、交换值a ^= b位取反<<左移(乘2的幂)a << 3>>右移(除2的幂、算术/逻辑移位)a >> 2按位运算在底层开发中极为重要,合理使用可显著提升代码效率和简洁性,但需谨慎处理边界条件和未定义行为。
2025-04-02 20:48:05
933
原创 详细说明一下C++中的static关键字
上下文作用生命周期访问方式类静态成员变量所有实例共享数据程序运行期类名::变量名类静态成员函数操作静态数据,无this指针类名::函数名()局部静态变量保留函数调用间的状态程序运行期函数内部全局静态变量限制变量为文件内可见程序运行期文件内理解static的不同用途,能显著提升代码的模块化、封装性和性能。
2025-04-02 20:17:27
331
原创 解决用git bash终端 tail -f 命令查看日志中文乱码问题
多数情况下,设置环境变量为 UTF-8 + 检查字体即可解决问题。若日志文件本身为其他编码(如 GBK),则需通过iconv转换。若问题持续,建议检查系统区域设置或更新 Git for Windows 至最新版本。
2025-04-02 10:14:06
546
原创 详细说明Qt 中共享内存方法: QSharedMemory 对象
是 Qt 中高效的进程间通信工具,适用于需要低延迟、高吞吐量的数据共享场景。使用时需严格管理锁机制和错误状态,并结合实际需求选择合适的同步策略。对于简单场景,可优先考虑更易用的或D-Bus。
2025-04-01 10:10:06
856
原创 修改Windows控制台的输入模式GetStdHandle、GetConsoleMode和SetConsoleMode方法
1.禁用快速编辑模式:防止用户鼠标选择文本导致程序阻塞。2.禁用插入模式:统一文本输入行为(通常为覆盖模式)。3.禁用鼠标输入:避免鼠标事件干扰程序逻辑。这段代码通过精细控制控制台输入模式,优化了程序在特定场景下的稳定性和用户体验。理解每个标志的作用及合理使用错误处理机制,是编写健壮控制台应用程序的关键。
2025-03-28 13:58:30
844
原创 详细Windows用于控制电源和休眠状态的系统函数
持续阻止系统休眠(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)。允许在低功耗模式下运行后台任务(ES_AWAYMODE_REQUIRED)。阻止显示器关闭(ES_DISPLAY_REQUIRED)。适用于需要长时间保持系统活跃的应用程序,但需注意合理释放资源并兼容不同硬件环境。
2025-03-28 11:13:58
840
原创 详细介绍Qt中用于断言的宏 Q_ASSERT
可通过重写 QtMessageHandler 捕获断言失败事件,自定义错误处理逻辑(例如记录日志而非崩溃):// ...Q_ASSERT仅用于调试,不可替代运行时错误处理。结合 Q_ASSERT_X提供更清晰的错误信息。合理配置构建模式,避免影响 Release 版本性能。通过合理使用断言,可以显著提升代码的健壮性和可维护性。
2025-03-26 14:00:03
842
原创 详细说明windows系统函数::SetUnhandledExceptionFilter(ExceptionFilter)
记录崩溃信息(如调用栈、寄存器状态)。生成 MiniDump 文件(用于后续调试)。执行紧急数据保存或资源释放。上传错误报告到服务器。生成崩溃转储文件(MiniDump)。记录错误日志。优雅终止程序。使用时需注意异常处理函数的可靠性、线程安全性和潜在覆盖问题。对于复杂项目,建议结合 Vectored Exception Handling 或第三方崩溃报告库(如 Google Breakpad)。
2025-03-25 21:03:26
681
原创 Qt中QApplication::processEvents()详细讲解
是一把双刃剑:它能临时解决界面冻结问题,但滥用可能导致复杂问题。在多数情况下,多线程或异步设计是更优解。使用时需严格管理代码逻辑,确保安全性和稳定性。
2025-03-25 13:39:23
690
原创 C++ STL 中有哪些容器?它们的主要区别是什么?
主要区别顺序与无序:序列容器:存储元素时会保持元素的顺序(如 vector、deque、list)。关联容器:元素按一定的顺序(如升序)自动排序(如 set、map)。无序关联容器:元素没有顺序,通过哈希表存储(如 unordered_set、unordered_map)。允许重复元素:set、map 不允许重复元素。multiset、multimap 允许重复元素。
2024-12-20 16:48:36
914
原创 windows平台上制作qt开发的程序安装包
在 Windows 平台上为用 Qt 开发的程序制作安装包,你可以使用 Qt 自带的工具。该工具允许你创建自定义安装程序,方便部署 Qt 应用程序。
2024-10-24 10:14:48
510
1
原创 C/C++调试工具GDB简单介绍
调试 (Debugging) 是软件开发过程中不可或缺的步骤之一,GDB(GNU Debugger)是C++开发中一个非常强大的调试工具。使用GDB可以帮助你找到并解决代码中的问题。下面是一些关于如何使用GDB进行调试的基础信息和常见命令。
2024-09-13 16:55:03
674
原创 基本数据结构:“树”的简单介绍
所有层(除最后一层外)都是满的:即每层包含的结点数都是最大可能的。最后一层的结点尽量靠左排列:即最后一层上的结点都是从左到右填充的,没有空隙。完全二叉树因其紧凑的结构和优良的性质,在实际应用中广泛存在。它的层次性表示使得在某些情况下,它可以非常高效地被存储和操作。只需简单的数组操作,即可轻松完成许多复杂的数据结构操作,从而提升算法的性能。希望这个解释对你有帮助!如果你有更多问题或需要举例说明,请随时告诉我!😊每一个结点要么是叶子结点,要么有两个子结点:即没有只有一个子结点的结点。所有叶子结点都在同一层。
2024-09-13 15:52:54
1296
原创 简单介绍Maven项目管理和构建自动化工具
Maven是一个强大的项目管理和构建自动化工具,特别用于 Java 项目。它提供了一个标准的结构和管理机制,从而简化了项目的构建、依赖管理和发布过程。
2024-09-11 09:42:36
556
原创 C++力扣简单算法题整理-2(字符串、数组)
如果 少于 k 个独一无二的字符串,那么返回 空字符串 “”。由于少于 3 个独一无二字符串,我们返回空字符串 “”。输入:arr = [“d”,“b”,“c”,“b”,“c”,“a”], k = 2。arr 中所有字符串都是独一无二的,所以返回第 1 个字符串 “aaa”。输入:arr = [“aaa”,“aa”,“a”], k = 1。输入:arr = [“a”,“b”,“a”], k = 3。arr 中独一无二字符串包括 “d” 和 “a”。由于 k == 2 ,返回 “a”。
2024-09-06 15:24:44
319
原创 C++中遍历数组时使用++i和i++的区别
在遍历普通的数组时,++i和i++的区别其实与在遍历 STL 容器中的迭代器时的区别类似,但在大多数现代编译器和简单数据类型情况下,性能差异基本可以忽略。尽管在遍历普通的数组时性能差异不大,不过在专业编程中,还是推荐使用 `++i` 而不是 `i++`。这是因为这种习惯有助于保持代码的一致性和高效性,特别是在考虑到其他复杂的数据结构或对象时。此外,`++i` 本身的语义也更明确——直接说明了在此操作中我们的主要目的是递增,而不是获取以前的值。。
2024-09-03 09:37:17
490
原创 C++使用迭代器遍历的时候为什么++it 要比it++好一些呢
在 C++ 中,++it和it++是递增迭代器的两种方式,但它们有一些区别,特别是在性能优化的角度。我们可以一起看看这两种方式的具体差别。尽管在大多数现代编译器中,对于简单的迭代器如 `int*`,优化器可能会消除绝大多数的差异,但在习惯上和代码效率上,还是提倡使用 `++it` 而不是 `it++`。这是因为前者在一些特殊的迭代器实现中性能更优,并且这样的习惯有助于写出更高效的代码。
2024-09-03 09:29:35
436
原创 DDS(Data Distribution Service)的数据状态分布和管理简单介绍
通过这些机制,DDS 可以有效地关注数据状态的分布和管理,确保数据在分布式系统中的一致性和实时性。DDS 的设计使其特别适用于需要高度可靠和实时数据分发的应用场景,如工业自动化、军事通信、机器人控制等。🌟如果你还有其他问题或需要进一步的细节,随时告诉我!😊。
2024-09-02 17:24:23
868
原创 DDS(Data Distribution Service)简单介绍
DDS 是由 Object Management Group (OMG) 制定的标准,通过定义数据分发的模型和 API,提供了一种数据驱动的通信机制。与传统的消息传递系统不同,DDS 更加关注数据状态的分布和管理。DDS 提供了一种强大且灵活的通信机制,适用于各种复杂、实时的数据交换场景。通过其丰富的 QoS 策略、强类型数据模型和内置的自动发现机制,DDS 能够满足高性能、可靠性和扩展性的需求。
2024-09-02 16:25:52
1108
原创 ROS2 简单介绍
ROS 2 是一个开源的机器人中间件框架,旨在促进开发复杂的机器人应用程序。它建立在 DDS(Data Distribution Service)标准之上,提供了高效且灵活的通信机制。ROS 2 支持多平台,包括 Linux、Windows 和 macOS。ROS 2 是一个强大的机器人开发框架,继承了 ROS 1 的优点,同时在安全性、实时性、多平台支持和分布式系统方面做了大量改进。通过其模块化和可扩展的设计,ROS 2 提供了灵活性和高效性,使其成为现代机器人开发的重要工具。
2024-09-02 16:18:33
1156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人