c++
文章平均质量分 66
湫兮之风
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++: 一文掌握std::vector::assign函数
是一个强大而多才多艺的工具,让你能够:✅ 一次性替换所有内容✅ 从各种源快速填充数据✅ 编写更简洁、更高效的代码✅ 避免手动内存管理的复杂性。原创 2025-12-01 11:28:10 · 455 阅读 · 0 评论 -
C++:彻底理解左值和右值(从概念到实践,基础版)
左值(locator value)表示在内存中有确定地址可以被取地址 (&)的对象。换句话说:左值是有名字、能被赋值的东西。右值是没有明确内存地址的临时对象或字面值。它通常出现在赋值号的右侧,用来给左值赋值。原创 2025-10-15 11:35:53 · 1262 阅读 · 0 评论 -
C++: 左值(lvalue)与右值(rvalue)详解
输入参数:使用const T&(或对小型标量直接用T需要接收任意左/右值并转发:在模板中使用T&&(转发引用)并用转发。实现移动语义:为资源类型实现移动构造函数和移动赋值,标注noexcept(以便容器优先移动)。避免返回局部引用;对临时要么返回值(C++17 已高效),要么返回智能指针。使用std::move明确意图,但只在你确定不再需要源对象时使用。Prefer(即模板T&&参数处)。原创 2025-09-29 13:58:24 · 1011 阅读 · 0 评论 -
C++: 深入解析std::bind
std::bind是 C++ 标准库里一个老牌的工具(自 C++11 起引入),作用是把一个可调用对象(函数、函数对象、成员函数指针等)和若干参数“绑定”在一起,得到一个新的可调用对象。这个新对象可以在以后被调用,并以你指定的方式把参数传给原始的可调用对象。尽管在现代 C++ 哲学里lambda更受欢迎,std::bind仍然值得理解:它有独特的语义(占位符、参数重排、按值/按引用保存参数)和一些不直观的陷阱。本文把std::bind的工作原理、常见用法、示例、陷阱与替代方案都讲清楚。原创 2025-09-29 10:01:08 · 1386 阅读 · 0 评论 -
C++: Lambda表达式详解(从入门到深入)
mutable按值捕获的变量默认是只读的,若想修改副本需加mutableint x = 10;// 输出 11Lambda 捕获列表:决定如何引入外部作用域变量(值 / 引用 / this)。参数传递:调用时显式传值,更灵活。捕获与参数结合使用:是 Lambda 强大的原因之一。注意生命周期:尤其是按引用捕获。Lambda 让 C++ 代码更简洁、更现代,是函数式编程思想在 C++ 的体现。掌握 Lambda,是写出现代 C++ 的必经之路。原创 2025-09-28 14:29:55 · 499 阅读 · 0 评论 -
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 · 361 阅读 · 0 评论 -
C++: 深入解析std::back_inserter(一篇详尽的博客)
看似一个小工具,但在写现代 C++ 时它极常用、也非常有用。本文从概念、原理、用法、示例、性能和常见坑全方位讲清楚,帮助你不但会用,而且用得稳、用得妙。原创 2025-09-28 11:44:27 · 1039 阅读 · 0 评论 -
C++: vector中emplace_back与push_back的区别详细解析
都是往容器(比如 , , 等)末尾插入一个元素。插入完成后,容器的大小 () 会增加 1。插入位置都是 容器的尾部,不能指定任意位置。 作用:把一个 已经构造好的对象 加到容器末尾。参数:只能传入一个已经存在的对象,或者能隐式转换为容器元素类型的对象。过程(以 为例):你先要有一个 类型的对象; 会 拷贝构造(或移动构造,如果传右值)一个新的对象到容器末尾。例子:3. 的语义 作用:在容器尾部 就地(in-place)直接构造对象,而不是先构造再拷贝/移动。参数:是原创 2025-09-22 14:08:58 · 515 阅读 · 0 评论 -
C++: constexpr详解(通俗+示例+最佳实践)
constexpr是 C++ 用来把“能在编译期做的事情”提前做掉的强大工具:它让你的程序更快、类型更安全、错误更早暴露。随着 C++ 标准的演进(C++14/17/20……),constexpr的能力越来越强(配合constevalconstinit等新关键字),现代 C++ 编程里constexpr已经成为元编程和性能优化的重要手段。想写更严谨的库或更快的程序,多学学constexpr就对了。原创 2025-09-22 11:23:46 · 1470 阅读 · 0 评论 -
C++: 构造函数中的explicit详解
explicit在 C++ 中,explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化。默认情况下,单参数构造函数既可以显式调用,也可以被编译器用来进行隐式类型转换。explicit这个构造函数只能显式调用,不能用于隐式转换。explicit防止构造函数或转换运算符被隐式调用。在单参数构造函数和转换运算符中使用最为常见。自 C++11 起,还能用于;C++20 引入,进一步增强灵活性。默认加上explicit,除非你有充分理由允许隐式转换。原创 2025-09-22 10:55:04 · 618 阅读 · 0 评论 -
C++: 友元(friend)全面解析
C++ 的友元(friend)提供了一种特殊的访问权限,让外部函数或类可以绕过封装,直接访问类的私有成员。friend可以修饰函数、类、成员函数它增强了类之间的协作性,但也会削弱封装性使用时要谨慎,推荐在运算符重载、调试接口、紧密耦合的类协作等场景中使用友元是一把“双刃剑” —— 它能让代码更灵活,但也可能破坏面向对象的封装原则。合理使用,才能发挥它的最大价值。原创 2025-09-22 09:34:09 · 1032 阅读 · 0 评论 -
C++: 成员函数后面的 const:你真的懂了吗?
函数末尾的const只对成员函数有意义。它保证函数内部不会修改对象的状态,this是指向常量的指针。好处:编译期安全、接口更清晰、支持 const 对象调用。常用场景:各种 getter、只读操作、判断函数。mutable可突破限制,用于缓存等非逻辑状态。原创 2025-09-11 11:44:31 · 896 阅读 · 0 评论 -
OpenCV: cv::warpAffine()逆仿射变换详解
用途:对图像做仿射变换(旋转/缩放/剪切/平移)关键矩阵:2×3 (CV_32FCV_64F用或自构造常用 flags(多数场景),INTER_AREA(缩小),(放大)边界等提示:若 M 已经是 dst→src,使用;想保留整个旋转图像需调整输出尺寸与平移分量。原创 2025-09-05 15:46:43 · 1195 阅读 · 0 评论 -
Opencv: cv::LUT()深入解析图像块快速查表变换
LUT(查找表),顾名思义,就是一个数组,预先存放了所有可能输入值对应的输出值。以 8 位灰度图为例,像素值范围是0 ~ 255,那我们可以构建一个长度为 256 的查找表:然后,处理图像时,只需用像素值作为索引,直接取表里的结果即可 ——O(1) 查找,速度极快。原创 2025-09-04 15:32:19 · 471 阅读 · 0 评论 -
OpenCV: Mat存储方式全解析-单通道、多通道内存布局详解
Mat在使用 OpenCV 的过程中,我们经常会接触cv::Mat这种图像矩阵类型。理解Mat在内存中的布局非常重要,尤其是做指针访问、性能优化、SIMD(如 AVX/NEON)加速时。Mat的存储方式单通道 vs 多通道的内存布局如何用指针访问某个像素判断Mat是否连续实战图示与代码。原创 2025-09-04 10:33:30 · 538 阅读 · 0 评论 -
C++ std::map erase() 和迭代器详解:常见面试陷阱与深入理解
erase(it)会返回map.end(),表示迭代器已到达末尾。// 指向 key=2// 删除 key=2// 现在 it == m.end()情况说明删除并前进到下一个删除末尾元素erase()返回end()的意义一个不指向任何元素的“哨兵”迭代器失效规则只有被删元素的迭代器失效。原创 2025-07-30 10:16:19 · 516 阅读 · 0 评论 -
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 · 2498 阅读 · 0 评论 -
C++: std::tuple详细介绍
/ 定义一个包含三种类型(int, double, std::string)的元组// 初始化std::tuple是C++中一个非常有用的模板类,用于存储和操作固定大小的异构数据集合。它支持元素的访问、修改、比较和解构,广泛应用于需要处理多个不同类型值的场景。原创 2025-03-20 14:52:06 · 509 阅读 · 0 评论 -
C++:memcpy耗时分析
memcpy函数的耗时取决于多个因素,包括复制的数据量、系统的内存带宽、缓存情况以及具体的实现方式。在大多数情况下,memcpy是一个非常高效的函数,但在某些场景下,它可能会成为性能瓶颈。原创 2025-03-19 14:38:23 · 931 阅读 · 0 评论 -
C++: std::copy函数解释与举例
是 C++ 标准库中的一个算法函数,用于将一个范围内的元素复制到另一个范围。之前,必须确保目标范围具有足够的空间来容纳源范围的元素。:源范围的结束迭代器,表示要复制的元素序列的结束位置(不包含该迭代器指向的元素)。要求源范围的迭代器至少是输入迭代器,目标范围的迭代器至少是输出迭代器。:目标范围的起始迭代器,表示复制后的元素将从该位置开始存储。,指向目标范围的末尾(即最后一个被写入元素的下一个位置)。:源范围的起始迭代器,表示要复制的元素序列的开始位置。:从源范围的中间位置开始复制到目标范围。原创 2025-03-19 14:33:04 · 633 阅读 · 0 评论 -
C++:std::vector常用函数及用法详解
✅。原创 2025-02-06 14:44:43 · 1360 阅读 · 0 评论 -
C++:assert()断言函数
assert()assert()assert()是 C++ 标准库<cassert>头文件中的。如果断言条件不满足(即false),程序会终止并打印错误信息,帮助开发者快速发现问题。原创 2025-02-06 10:29:08 · 2282 阅读 · 0 评论 -
C++:常量对象为何只能掉调用常量成员函数
在 C++ 中,如果一个对象是const,那么它的不能被修改。因此,为了保证这一特性,编译器const对象调用(即const修饰的成员函数),从而防止const对象被修改。是指const如果const对象允许调用const成员函数,可能会修改const对象的内部数据,违背const语义,因此编译器会报错。const成员函数。原创 2025-02-06 10:07:19 · 383 阅读 · 0 评论 -
C++:深拷贝vs浅拷贝(通俗易懂)
在 C++(尤其是 OpenCV、STL 容器等)中,拷贝数据时主要有。原创 2025-02-05 11:35:23 · 873 阅读 · 0 评论 -
C++:内存泄漏
内存泄漏(Memory Leak)是指在计算机程序中,已经动态分配的内存(通常是在堆上分配的内存)由于某种原因未被正确释放,导致这部分内存无法再被程序使用,却又一直占用着系统的内存资源,最终可能会导致系统性能下降甚至崩溃。原创 2025-02-05 10:06:43 · 286 阅读 · 0 评论 -
C++:深入理解const_iterator的应用
是标准容器提供的一种迭代器类型,它允许读取容器中的元素,但不能修改这些元素的值。适用于需要在遍历过程中保护容器数据不被意外修改的场景。特性只读访问:不能通过修改元素。适用于const容器:在遍历常量容器(const容器)时,必须使用。安全性:防止不小心对容器元素进行修改,提升代码的健壮性。是C++STL提供的一种重要工具,用于只读访问容器元素。数据保护:避免无意修改容器内容。适配常量容器:为常量容器提供访问能力。清晰的开发意图:提高代码的可维护性。通过合理使用。原创 2025-01-20 14:50:36 · 805 阅读 · 0 评论 -
C++: Dtrees:load(constg String& filepath, const String& nodeName)中nodeName参数含义
是加载文件时的逻辑名称,而非XML文件的实际字段。它仅在OpenCV加载模型时作为定位参考。是什么,或者文件包含哪些节点,可以打开XML文件检查其结构。如果一个XML或YAML文件中存储了多个模型,可以通过。如果文件中存储的是一棵更大的数据结构,而你只需要其中的一部分,如果只有一个模型,直接使用空的。可以帮助定位到具体的部分。原创 2025-01-20 11:07:12 · 434 阅读 · 0 评论 -
C++:inline函数的作用
inline函数是一种优化手段,建议编译器将函数调用替换为函数体,减少函数调用开销。适用于短小且频繁调用的函数,但编译器最终决定是否内联。通常在头文件中定义,比宏更安全,具有函数的特性。使用inline函数可以在一定程度上提高程序性能,但要注意其适用场景和编译器的决定权,并且要理解它与宏的区别,避免错误使用。原创 2025-01-18 14:55:04 · 550 阅读 · 0 评论 -
C++:std::fstream详细介绍
是一个功能强大的类,允许同时对文件进行读取和写入操作。它支持多种打开模式,使得它适用于各种文件操作需求。通过合理使用文件模式、读取和写入方法,可以轻松地处理文件中的数据。原创 2024-12-04 16:02:36 · 1629 阅读 · 0 评论 -
C++:std::deque简介
std::deque是 C++ 标准模板库(STL)中的一个双端队列(Double-ended Queue)容器。它是一种,允许快速地在序列的两端插入和删除元素,同时支持随机访问。原创 2024-12-04 15:34:54 · 761 阅读 · 0 评论 -
C++:std::map的重新初始化与清空操作
对于简单清空std::map的需求,推荐使用clear(),更高效且易读。而重新初始化(使用赋值一个新std::map)适用于需要重置底层资源的情况。在实际开发中,应根据场景权衡性能和语义清晰度。原创 2024-12-04 15:24:38 · 1214 阅读 · 0 评论 -
Protobuf:enum作用域详细解释
如果枚举直接定义在。原创 2024-11-25 14:10:29 · 491 阅读 · 0 评论 -
C++:线程(thread)的创建、调用及销毁
/ 创建线程并传递参数t1.join();// 等待 t1 完成t2.join();// 等待 t2 完成return 0;使用创建和管理线程。join()和detach()用于控制线程的生命周期。避免重复join()或detach(),确保资源管理得当。使用同步机制保护共享数据的访问。通过这种方式,你可以更灵活地创建、管理和销毁 C++ 线程,确保程序的并发性和资源管理的安全性。原创 2024-11-08 09:33:17 · 3804 阅读 · 0 评论 -
C++:字符串拼接“(“时报错,原因及解决方法详解
在 C++ 中,开发者有时会遇到一个奇怪的现象:尝试拼接字符串时,中间的某个括号或其他字符会引发编译器的"爆红"提示。这通常是一个令人困惑的问题,因为拼接看似是非常简单的操作。,我们可以轻松解决这个问题。希望本文能够帮助您更好地理解 C++ 字符串拼接的细节,避免类似的陷阱。遇到 C++ 字符串拼接时括号“爆红”的情况通常是因为类型不匹配。为了使拼接操作生效,可以通过显式地将字符串字面量转换为。类型,从而避免了任何类型不匹配的问题。令人意外的是,这段代码可能会在中间的。,之后的所有拼接操作都会自动转换为。原创 2024-11-07 15:26:50 · 719 阅读 · 0 评论 -
C++:c++中调用Python代码的几种方法
Python 提供了一个 C API,允许在 C/C++ 程序中嵌入 Python 代码。首先需要确保 Python 开发包已经安装。你可以通过 来使用 Python C API。编译时,需要链接 Python 库:2. 通过 函数调用 Python 脚本你可以使用 C++ 的 函数来调用外部 Python 脚本。虽然简单,但这方法不太灵活。3. 嵌入 Python 解释器嵌入 Python 解释器允许你更灵活地调用 Python 函数和模块。你可以使用 Python C A原创 2024-10-24 17:20:37 · 4297 阅读 · 0 评论 -
C++:visual studio项目属性->配置属性->常规->配置类型中.exe与.dll的区别
dll是动态链接库,提供代码供其他程序调用,而.exe是独立的可执行程序,可以直接运行。原创 2024-10-24 15:41:33 · 977 阅读 · 0 评论 -
C++:内存泄漏问题
内存泄漏会导致内存资源的浪费和程序性能的下降,甚至导致程序崩溃。通过良好的内存管理、使用合适的工具和编程习惯,可以有效防止内存泄漏。原创 2024-10-14 14:36:33 · 577 阅读 · 0 评论 -
C++:命名空间(namespace)详细介绍与案例
命名空间(namespace)是C++中的一个重要概念,用于组织代码和避免名称冲突。它们允许程序员将标识符(如变量、函数、类等)组织在一起,以便在较大的程序中防止命名冲突。原创 2024-10-12 16:55:37 · 534 阅读 · 0 评论 -
C++: std::stringstream::str()的用法及使用场景
是一个灵活且强大的工具,适合在处理文本、格式化数据、类型转换等场景下使用。通过str()函数,可以轻松获取流中存储的字符串,或者设置流的内容,以实现更复杂的数据操作。使用字符串拼接类型转换(例如字符串转数值)格式化输出分割字符串数据解析这一工具在开发中非常常见,尤其是在需要灵活处理输入输出的情况下。原创 2024-10-12 09:51:48 · 1443 阅读 · 0 评论 -
C++:visual studio运行时找不到.dll文件
即使.lib和.dll文件在同一目录下,Visual Studio 在编译时只需要.lib文件,而程序运行时需要.dll文件。你可以通过将.dll文件放在可执行文件目录、修改PATH环境变量、或设置工作目录来解决找不到.dll文件的问题。原创 2024-10-10 10:49:49 · 4562 阅读 · 1 评论
分享