自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(218)
  • 收藏
  • 关注

原创 C++: 一文掌握std::vector::assign函数

是一个强大而多才多艺的工具,让你能够:✅ 一次性替换所有内容✅ 从各种源快速填充数据✅ 编写更简洁、更高效的代码✅ 避免手动内存管理的复杂性。

2025-12-01 11:28:10 408

原创 OpenCV:arcLength函数详细解释与应用

arcLength是OpenCV中用于的函数。它可以计算轮廓的周长或者任意曲线的长度。

2025-11-19 14:03:31 359

原创 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: 不同函数所支持的Mat类型汇总

CV_32F。

2025-08-05 10:05:19 601

原创 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++:std::vector常用函数及用法详解

✅。

2025-02-06 14:44:43 1343

原创 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

原创 C++:深拷贝vs浅拷贝(通俗易懂)

在 C++(尤其是 OpenCV、STL 容器等)中,拷贝数据时主要有。

2025-02-05 11:35:23 861

原创 算法:线性同余法(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关注的人

提示
确定要删除当前文章?
取消 删除