- 博客(218)
- 收藏
- 关注
原创 C++: 一文掌握std::vector::assign函数
是一个强大而多才多艺的工具,让你能够:✅ 一次性替换所有内容✅ 从各种源快速填充数据✅ 编写更简洁、更高效的代码✅ 避免手动内存管理的复杂性。
2025-12-01 11:28:10
408
原创 NCC的亚像素精度如何实现
NCC(Normalized Cross-Correlation)本质是一个虽然 NCC 只能在整数像素位置计算,但 NCC 的峰值(最大值)可以通过“拟合”在峰值附近的 NCC 曲面上求得亚像素位置。这和你前面理解的“亚像素需要连续函数”是一致的。假设 NCC 最大值出现在整数坐标 (i, j)。把这 3×3 点的 NCC 值拟合成一个这是。
2025-11-18 15:41:21
785
原创 C++:彻底理解左值和右值(从概念到实践,基础版)
左值(locator value)表示在内存中有确定地址可以被取地址 (&)的对象。换句话说:左值是有名字、能被赋值的东西。右值是没有明确内存地址的临时对象或字面值。它通常出现在赋值号的右侧,用来给左值赋值。
2025-10-15 11:35:53
1235
原创 C++: 左值(lvalue)与右值(rvalue)详解
输入参数:使用const T&(或对小型标量直接用T需要接收任意左/右值并转发:在模板中使用T&&(转发引用)并用转发。实现移动语义:为资源类型实现移动构造函数和移动赋值,标注noexcept(以便容器优先移动)。避免返回局部引用;对临时要么返回值(C++17 已高效),要么返回智能指针。使用std::move明确意图,但只在你确定不再需要源对象时使用。Prefer(即模板T&&参数处)。
2025-09-29 13:58:24
1005
原创 C++: 深入解析std::bind
std::bind是 C++ 标准库里一个老牌的工具(自 C++11 起引入),作用是把一个可调用对象(函数、函数对象、成员函数指针等)和若干参数“绑定”在一起,得到一个新的可调用对象。这个新对象可以在以后被调用,并以你指定的方式把参数传给原始的可调用对象。尽管在现代 C++ 哲学里lambda更受欢迎,std::bind仍然值得理解:它有独特的语义(占位符、参数重排、按值/按引用保存参数)和一些不直观的陷阱。本文把std::bind的工作原理、常见用法、示例、陷阱与替代方案都讲清楚。
2025-09-29 10:01:08
1374
原创 C++: Lambda表达式详解(从入门到深入)
mutable按值捕获的变量默认是只读的,若想修改副本需加mutableint x = 10;// 输出 11Lambda 捕获列表:决定如何引入外部作用域变量(值 / 引用 / this)。参数传递:调用时显式传值,更灵活。捕获与参数结合使用:是 Lambda 强大的原因之一。注意生命周期:尤其是按引用捕获。Lambda 让 C++ 代码更简洁、更现代,是函数式编程思想在 C++ 的体现。掌握 Lambda,是写出现代 C++ 的必经之路。
2025-09-28 14:29:55
493
原创 C++: std::sort 与 std::stable_sort的深入比较与使用指南
本文对比C++标准库中的std::sort和std::stable_sort排序算法。两者时间复杂度均为O(NlogN),但存在关键差异:std::sort采用混合排序算法,性能优先但不稳定;std::stable_sort使用归并排序,保证稳定性但需要更多内存。稳定性指相等元素保持原顺序,这对多关键字排序、日志记录等场景很重要。选择建议:内存敏感选std::sort,顺序敏感选std::stable_sort。典型应用如先按次关键字排序再用stable_sort处理主关键字,可保持多级排序的稳定性。
2025-09-28 14:13:59
356
原创 C++: 深入解析std::back_inserter(一篇详尽的博客)
看似一个小工具,但在写现代 C++ 时它极常用、也非常有用。本文从概念、原理、用法、示例、性能和常见坑全方位讲清楚,帮助你不但会用,而且用得稳、用得妙。
2025-09-28 11:44:27
1019
原创 C++: vector中emplace_back与push_back的区别详细解析
都是往容器(比如 , , 等)末尾插入一个元素。插入完成后,容器的大小 () 会增加 1。插入位置都是 容器的尾部,不能指定任意位置。 作用:把一个 已经构造好的对象 加到容器末尾。参数:只能传入一个已经存在的对象,或者能隐式转换为容器元素类型的对象。过程(以 为例):你先要有一个 类型的对象; 会 拷贝构造(或移动构造,如果传右值)一个新的对象到容器末尾。例子:3. 的语义 作用:在容器尾部 就地(in-place)直接构造对象,而不是先构造再拷贝/移动。参数:是
2025-09-22 14:08:58
499
原创 C++: constexpr详解(通俗+示例+最佳实践)
constexpr是 C++ 用来把“能在编译期做的事情”提前做掉的强大工具:它让你的程序更快、类型更安全、错误更早暴露。随着 C++ 标准的演进(C++14/17/20……),constexpr的能力越来越强(配合constevalconstinit等新关键字),现代 C++ 编程里constexpr已经成为元编程和性能优化的重要手段。想写更严谨的库或更快的程序,多学学constexpr就对了。
2025-09-22 11:23:46
1449
原创 C++: 构造函数中的explicit详解
explicit在 C++ 中,explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化。默认情况下,单参数构造函数既可以显式调用,也可以被编译器用来进行隐式类型转换。explicit这个构造函数只能显式调用,不能用于隐式转换。explicit防止构造函数或转换运算符被隐式调用。在单参数构造函数和转换运算符中使用最为常见。自 C++11 起,还能用于;C++20 引入,进一步增强灵活性。默认加上explicit,除非你有充分理由允许隐式转换。
2025-09-22 10:55:04
615
原创 C++: 友元(friend)全面解析
C++ 的友元(friend)提供了一种特殊的访问权限,让外部函数或类可以绕过封装,直接访问类的私有成员。friend可以修饰函数、类、成员函数它增强了类之间的协作性,但也会削弱封装性使用时要谨慎,推荐在运算符重载、调试接口、紧密耦合的类协作等场景中使用友元是一把“双刃剑” —— 它能让代码更灵活,但也可能破坏面向对象的封装原则。合理使用,才能发挥它的最大价值。
2025-09-22 09:34:09
1015
原创 C++: 成员函数后面的 const:你真的懂了吗?
函数末尾的const只对成员函数有意义。它保证函数内部不会修改对象的状态,this是指向常量的指针。好处:编译期安全、接口更清晰、支持 const 对象调用。常用场景:各种 getter、只读操作、判断函数。mutable可突破限制,用于缓存等非逻辑状态。
2025-09-11 11:44:31
885
原创 Ubuntu:Git SSH密钥配置的完整流程
id_rsaid_rsa.pub→ 旧的 RSA 密钥对id_ed25519→ 较新的 ED25519 密钥对如果已经存在,而且没过期,可以直接用。如果显示密钥过期,建议重新生成。
2025-09-06 11:15:39
621
原创 OpenCV: cv::warpAffine()逆仿射变换详解
用途:对图像做仿射变换(旋转/缩放/剪切/平移)关键矩阵:2×3 (CV_32FCV_64F用或自构造常用 flags(多数场景),INTER_AREA(缩小),(放大)边界等提示:若 M 已经是 dst→src,使用;想保留整个旋转图像需调整输出尺寸与平移分量。
2025-09-05 15:46:43
1165
原创 Opencv: cv::LUT()深入解析图像块快速查表变换
LUT(查找表),顾名思义,就是一个数组,预先存放了所有可能输入值对应的输出值。以 8 位灰度图为例,像素值范围是0 ~ 255,那我们可以构建一个长度为 256 的查找表:然后,处理图像时,只需用像素值作为索引,直接取表里的结果即可 ——O(1) 查找,速度极快。
2025-09-04 15:32:19
455
原创 OpenCV: Mat存储方式全解析-单通道、多通道内存布局详解
Mat在使用 OpenCV 的过程中,我们经常会接触cv::Mat这种图像矩阵类型。理解Mat在内存中的布局非常重要,尤其是做指针访问、性能优化、SIMD(如 AVX/NEON)加速时。Mat的存储方式单通道 vs 多通道的内存布局如何用指针访问某个像素判断Mat是否连续实战图示与代码。
2025-09-04 10:33:30
532
原创 Opencv: cv::Mat支持的类型汇总
OpenCV 里 cv::Mat→ 决定每个元素的存储格式(位数、是否浮点)→ 决定每个像素包含多少个值(如灰度图是 1,RGB 是 3,RGBA 是 4)
2025-08-05 10:00:07
443
原创 C++ std::map erase() 和迭代器详解:常见面试陷阱与深入理解
erase(it)会返回map.end(),表示迭代器已到达末尾。// 指向 key=2// 删除 key=2// 现在 it == m.end()情况说明删除并前进到下一个删除末尾元素erase()返回end()的意义一个不指向任何元素的“哨兵”迭代器失效规则只有被删元素的迭代器失效。
2025-07-30 10:16:19
503
原创 聚类算法: DBSCAN详细解释
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够发现形状任意的聚类,并能识别噪声点(即不属于任何聚类的数据)。它不需要预先指定簇的个数(不像 KMeans),而是通过密度(即某区域内点的数量)来判断聚类结构。
2025-05-07 14:30:02
1686
原创 Python: pipx详细解释
在 Python 开发过程中,我们常常需要安装和使用各种命令行工具,如代码格式化工具 black、代码质量检查工具 flake8 等。然而,这些工具的依赖项可能会与项目或其他工具的依赖项产生冲突。为了解决这个问题,pipx 应运而生。pipx 是一款用于安装和运行 Python 应用程序的工具,它为每个工具创建独立的隔离环境,确保工具的依赖项相互隔离,避免了依赖冲突的问题。同时,pipx 会将工具的命令行接口自动添加到系统 PATH 中,我们可以在命令行中直接使用这些工具,无需手动激活虚拟环境。
2025-05-06 14:25:48
842
原创 Python: 详细介绍pyinstaller打包py文件为可执行exe
如果尚未安装--onefile):生成一个独立的.exe文件,但启动速度稍慢。(默认):生成多个文件,启动较快,但要保留所有文件。
2025-04-02 14:26:17
807
原创 C++: visual studio加载nlohmann/json库及json库使用方法介绍
首先,在代码中包含json.hpp// 使用 json 命名空间,简化调用2. 创建 JSON(1)从std::map或构造 JSONjson j = {// 输出格式化 JSON"age": 25,3. 访问 JSON 数据(1)使用[]访问。
2025-03-24 14:11:58
2433
原创 C++: std::tuple详细介绍
/ 定义一个包含三种类型(int, double, std::string)的元组// 初始化std::tuple是C++中一个非常有用的模板类,用于存储和操作固定大小的异构数据集合。它支持元素的访问、修改、比较和解构,广泛应用于需要处理多个不同类型值的场景。
2025-03-20 14:52:06
499
原创 C++:memcpy耗时分析
memcpy函数的耗时取决于多个因素,包括复制的数据量、系统的内存带宽、缓存情况以及具体的实现方式。在大多数情况下,memcpy是一个非常高效的函数,但在某些场景下,它可能会成为性能瓶颈。
2025-03-19 14:38:23
915
原创 C++: std::copy函数解释与举例
是 C++ 标准库中的一个算法函数,用于将一个范围内的元素复制到另一个范围。之前,必须确保目标范围具有足够的空间来容纳源范围的元素。:源范围的结束迭代器,表示要复制的元素序列的结束位置(不包含该迭代器指向的元素)。要求源范围的迭代器至少是输入迭代器,目标范围的迭代器至少是输出迭代器。:目标范围的起始迭代器,表示复制后的元素将从该位置开始存储。,指向目标范围的末尾(即最后一个被写入元素的下一个位置)。:源范围的起始迭代器,表示要复制的元素序列的开始位置。:从源范围的中间位置开始复制到目标范围。
2025-03-19 14:33:04
622
原创 C++:assert()断言函数
assert()assert()assert()是 C++ 标准库<cassert>头文件中的。如果断言条件不满足(即false),程序会终止并打印错误信息,帮助开发者快速发现问题。
2025-02-06 10:29:08
2254
原创 C++:常量对象为何只能掉调用常量成员函数
在 C++ 中,如果一个对象是const,那么它的不能被修改。因此,为了保证这一特性,编译器const对象调用(即const修饰的成员函数),从而防止const对象被修改。是指const如果const对象允许调用const成员函数,可能会修改const对象的内部数据,违背const语义,因此编译器会报错。const成员函数。
2025-02-06 10:07:19
373
原创 算法:线性同余法(LCG,Linear Congruential Generator)
(数值会根据种子不同而不同)它使用一个递推公式,通过。是一种最简单、最常见的。生成一系列的伪随机数。
2025-02-05 10:56:22
2739
原创 C++:内存泄漏
内存泄漏(Memory Leak)是指在计算机程序中,已经动态分配的内存(通常是在堆上分配的内存)由于某种原因未被正确释放,导致这部分内存无法再被程序使用,却又一直占用着系统的内存资源,最终可能会导致系统性能下降甚至崩溃。
2025-02-05 10:06:43
280
原创 C++:深入理解const_iterator的应用
是标准容器提供的一种迭代器类型,它允许读取容器中的元素,但不能修改这些元素的值。适用于需要在遍历过程中保护容器数据不被意外修改的场景。特性只读访问:不能通过修改元素。适用于const容器:在遍历常量容器(const容器)时,必须使用。安全性:防止不小心对容器元素进行修改,提升代码的健壮性。是C++STL提供的一种重要工具,用于只读访问容器元素。数据保护:避免无意修改容器内容。适配常量容器:为常量容器提供访问能力。清晰的开发意图:提高代码的可维护性。通过合理使用。
2025-01-20 14:50:36
793
原创 OpenCV: 深入理解OpenCV中CV_WRAP_AS宏及其作用
宏的定义非常简单,它接受一个别名作为参数,并且在OpenCV的绑定生成过程中,使用该别名暴露相应的函数或运算符。这个宏本身不会在C++代码中改变任何行为,主要是通过帮助生成绑定代码来影响其他语言接口。
2025-01-20 14:24:24
697
原创 C++: Dtrees:load(constg String& filepath, const String& nodeName)中nodeName参数含义
是加载文件时的逻辑名称,而非XML文件的实际字段。它仅在OpenCV加载模型时作为定位参考。是什么,或者文件包含哪些节点,可以打开XML文件检查其结构。如果一个XML或YAML文件中存储了多个模型,可以通过。如果文件中存储的是一棵更大的数据结构,而你只需要其中的一部分,如果只有一个模型,直接使用空的。可以帮助定位到具体的部分。
2025-01-20 11:07:12
431
原创 C++:inline函数的作用
inline函数是一种优化手段,建议编译器将函数调用替换为函数体,减少函数调用开销。适用于短小且频繁调用的函数,但编译器最终决定是否内联。通常在头文件中定义,比宏更安全,具有函数的特性。使用inline函数可以在一定程度上提高程序性能,但要注意其适用场景和编译器的决定权,并且要理解它与宏的区别,避免错误使用。
2025-01-18 14:55:04
548
原创 C++:std::fstream详细介绍
是一个功能强大的类,允许同时对文件进行读取和写入操作。它支持多种打开模式,使得它适用于各种文件操作需求。通过合理使用文件模式、读取和写入方法,可以轻松地处理文件中的数据。
2024-12-04 16:02:36
1620
原创 C++:std::deque简介
std::deque是 C++ 标准模板库(STL)中的一个双端队列(Double-ended Queue)容器。它是一种,允许快速地在序列的两端插入和删除元素,同时支持随机访问。
2024-12-04 15:34:54
747
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅