c++ 内存顺序
搞懂无锁编程的重要一步是完全理解内存顺序! 本教程由作者和ChatGPT通力合作完成。 都有哪几种? c++的内存模型共有6种 memory_order_relaxed memory_order_consume memory_order_acquire memory_order_relea...[2023/3/14]
c/c++指针从浅入深介绍——基于数据内存分配的理解(上)
c/c++指针从浅入深介绍——基于数据内存分配的理解(上) 本文是对自我学习的一个总结以及回顾,文章内容主要是针对代码中的数据在内存中的存储情况以及存储中数值的变化来对指针进行介绍,是对指针以及数据在内存中数值是如何变化的,为什么需要使用到指针,为什么有时候使用指针很容易会报错,怎么去使用...[2023/3/14]
C++11 thread_local关键字
这是一篇科普文--关于thread_local关键字 首先,C++11之前并没有对并发进行任何的支持,C++11首次提供了以下的支持: 语言核心定义了一个内存模型,保证当更改"被两个不同线程使用"的两个object时,他们彼此独立,而引用thread_local关键字 标准库支持启动多线程,...[2023/3/8]
C++20中的span容器及用法小结
目录一.span容器二.span的用法1.将数组转换为 span:2.使用 span 来遍历一个容器:3.使用 span 来获取子序列:4.将 span 转换为其他容器类型:三.span的底层原理四.span 与 array ,vector ,数组指针 的区别1. span 与 array ,vec...[2023/3/6]
C++20中的std::span详解
span就是一个连续对象存储的观察者。类似std::string_view是string的观察者。连续的存储,不一定是数组。例如: zero(char (&arr) [10]); 10个元素的数组, sizeof(arr)==10*sizeof(char)==10 zero(ch...[2023/3/6]
C++学习之函数模板的使用详解
目录C++函数模板重载的模板模板局限性显示具体化实例化和具体化模板函数类型的确定 C++函数模板 template<typename T> void Swap(T &a ,T &b) { T temp; temp = a; a = b...[2023/3/3]
vs2022?x64?C/C++和汇编混编(案例代码)
目录vs2022环境x64 C/C++和汇编混编1、新建空的win32项目,新建main.cpp,示例代码如下2、新建asm64.asm汇编源文件,示例代码如下3、编译器配置,选择x64,debug或者release都可以,4、直接生成即可 vs2022环境x64 C/C++和汇编混编 vs64...[2023/2/27]
OpenCV使用GrabCut实现抠图功能
目录1、概述2、代码示例3、示例图片 1、概述 案例:使用OpenCV的GrapCut实现有用户交互的抠图 grabCut( InputArray img, InputOutputArray mask, Rect rect, Input...[2023/2/20]
OpenCV实现视频绿幕背景替换功能的示例代码
目录1、概述2、代码示例 1、概述 案例:使用OpenCV实现视频绿幕背景替换 算法步骤: 1.初始化VideoCapture并使用其open方法加载视频 2.while循环加读取frame capture.read(frame) 3.将frame转hsv色彩空间 4.使用i...[2023/2/20]
OpenCV通过透视变换实现矫正图像详解
目录1、概述2、代码演示3、示例图片 1、概述 案例:使用OpenCV将一张折射的图片给矫正过来 实现步骤: 1.载入图像 2.图像灰度化 3.二值分割 4.形态学操作去除噪点 5.轮廓发现 6.使用霍夫直线检测,检测上下左右四条直线(有可能是多条,但是无所谓) ...[2023/2/20]
c++ 程序通用多线程单例设计 c++ web 框架设计经验谈
设计 c++ web 框架时候,想要一个框架缓存类,很多通用缓存类是用字符保存,作为框架内置就不要序列和反序列了,因为框架内部使用。 想给自己的paozhu c++ web 框架添加缓存类,参考了springboot 于是确定用单例设计模式缓存类模板。 c++11后静态变量已经统一为线程安全...[2023/2/17]
高效字符串匹配算法——BM 算法详解(C++)
定义 BM 算法是由 Boyer 和 Moore 两人提出的一种高效的字符串匹配算法,被认为是一种亚线性算法(即平均的时间复杂度低于线性级别),其时间效率在一般情况下甚至比 KMP 还要快 3 ~ 5 倍。 原理 BM 算法跟其他的字符串匹配算法相比,其中一个不同之处是在比对字符的时候,扫描的...[2023/2/15]
C++右值引用与移动构造函数基础与应用详解
目录1.右值引用1.1左值右值的纯右值将亡值右值1.2右值引用和左值引用2.移动构造函数2.1完美的移动转发 1.右值引用 右值引用是 C++11 引入的与 Lambda 表达式齐名的重要特性之一。它的引入解决了 C++ 中大量的历史遗留问题, 消除了诸如 std::vector、std::st...[2023/2/15]
C++ lambda函数详解
目录Lambda 表达式基础1. 值捕获2. 引用捕获3. 隐式捕获4. 表达式捕获泛型 Lambda函数对象包装器 Lambda 表达式 Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性, 而匿名函数则是在需要一个函数,但...[2023/2/15]
一篇文章彻底搞懂C++常见容器
目录1.概述2.容器详解2.1vector(向量)2.2deque(双端队列)2.3list(列表)2.4 array(数组)2.5 string(字符串)2.6 map(映射)2.7 set(集合)3.后记 1.概述 C++容器属于STL(标准模板库)中的一部分(六大组件之一),从字面意思理解...[2023/2/15]
C++之list容器模拟实现方式
目录总述一、节点类二、迭代器类成员变量构造函数*重载->重载“++”“==“和”!=”三、反向迭代器类成员变量*重载->重载“++”“- -”" == &qu...[2023/2/8]
C++深浅拷贝及简易string类实现方式
目录三种拷贝方式浅拷贝深拷贝写时拷贝VS与GCC中的拷贝方式Windows VS2022Linux GCC简易string类传统版写法的string类现代版写法string类总结 三种拷贝方式 浅拷贝 对于自定义的string类,如果不显式定义拷贝构造函数,编译器会默认生成拷贝构造函数,此时...[2023/2/8]
C++之list容器介绍及使用方式
目录一、list底层结构二、构造方法构造函数拷贝构造函数三、元素访问和迭代器back&front三种遍历方式四、元素修改尾插、头插、尾删、头删insert、eraseswapresize五、特殊操作removeremove_ifunique、sortreverse六、list迭代器失效问题七...[2023/2/8]
C++内存对齐的实现
目录空类/静态成员内置类型数据成员结构体数据成员虚函数继承 内存对齐的基本原则: 结构(struct/cla )的内置类型数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的起始位置要从自身大小的整数倍开始存储(特别注意64位机器的指针大小为8个字节)。如果一个结构A里有结构体成...[2023/2/8]
C/C++内存对齐原则
C/C++内存对齐 what && why 当用户自定义类型时(struct 或 cla ),编译器会自动计算该类型占用的字节数。 C/C++ 为什么要内存对齐?我道行太浅,摘抄了网上的一个解释。 为了方便从内存中读取数据。假设没有内存对齐,在内存中存储一个 int 变量 ...[2023/2/6]
C/C++关于实现CAN信号的获取方法
目录CAN基础知识CAN 信号C语言涉及到知识 CAN基础知识 标准的CAN 数据为8字节,即64位,但是CAN FD的最大数据可为64字节,为512位,其中的帧ID分为标准帧和扩展帧,其中用11位标准帧,用29位表示扩展帧。 CAN 信号 信号具体指的是CAN数据的多少位到多少位间代表...[2023/2/6]
C/C++程序链接与反汇编工具objdump的使用介绍
目录链接阶段1.重定位2.解析引用3.链接示例 程序构建过程的第二个阶段就是链接,链接过程输入的是目标文件的集合。每个目标文件可以被看作单个源代码文件的二进制存储版本,需要为程序内存映射提供各种各样的节(代码.text 初始化数据.data 未初始化数据.b 和只读数据.rdata),链接器的最终...[2023/2/6]
C++聚合体初始化aggregate initialization详细介绍
目录聚合体初始化(aggregate initialization)扩展聚合体初始化的动机使用聚合体扩展聚合体的定义向后的不兼容性 聚合体初始化(aggregate initialization) C++有很多初始化对象的方法。其中之一叫做 聚合体初始化(aggregate initializa...[2023/2/6]
ua5.4源码剖析:三. C++与Lua相互调用
概述 从本质上来看,其实说是不存在所谓的C++与lua的相互调用。lua是运行在C上的,简单来说lua的代码会被编译成字节码在被C语言的语法运行。在C++调用lua时,其实是解释运行lua文件编译出来的字节码。lua调用C++其实还是解释运行lua文件编译出来的字节码的语义是调用lua栈上的C+...[2023/2/1]
C++类中const修饰的成员函数及日期类小练习
目录一.const修饰类的成员函数1.问题引出:2.问题分析3.const修饰类的成员函数 二. 类的两个默认的&运算符重载三. 日期类小练习 总结 一.const修饰类的成员函数 1.问题引出: 给出一段简单的代码 代码段: #include &l...[2023/1/30]
C++ 编译依赖管理系统分析以及 srcdep 介绍
C++ 编译依赖管理系统分析以及 srcdep 介绍 如果用 C++ 写一个中小型软件,有要用到很多第三方库的话,相信不少人会觉得比较麻烦。很多新兴的语言都有了统一的依赖管理系统和构建系统,但是 C/C++ 界一直没有比较正统的。(也不奇怪,连统一的 string 都没有,怎么可能有统一的依赖、...[2023/1/11]
C++利用用埃式筛法求解素数
目录埃式筛法埃式筛法求解某一个数字包含的所有素数数组埃式筛法判断某一个数字是否为素数 埃式筛法 首先要了解什么式埃式筛法之前,需要知道一个定理。 就是素数的整数倍一定不是素数。 了解了这个就基本大概懂了埃式筛法。 首先初始化一个布尔数组is_prime,用于记录每个数是否为素数。从2开...[2023/1/6]
<二>线程间互斥-mutex互斥锁和lock_guard
多线程程序 竞态条件:多线程程序执行的结果是一致的,不会随着CPU对线程不同的调用顺序而产生不同的运行结果. 解决?:互斥锁 mutex 经典的卖票问题,三个线程卖100张票 代码1 #include <iostream> #include <thread>...[2022/12/12]
地下城地图图块生成算法
一. 概述 生成地下城,包含房间和迷宫通路。类似: 示例效果一 示例效果二 二. 思路 1.生成迷宫通路 从房间的边缘坐标XY为奇数的格子生成迷宫,确保房间和迷宫通路之间有间隔墙壁(除了蓝色格子视为墙壁)。 迷宫通路生长每次探测两个格子,确保迷宫通路间有间隔墙壁。 2.生成过...[2022/12/12]
一文读懂野指针
一、引子 我们都知道对指针( Pointer)的操作,实际上是对计算机内存地址的操作,通过访问内存地址实现间接访问该地址中保存的数据。其实就是CPU的寻址方式中的间接寻址。简单概括正常使用指针时的3个...[2022/12/5]
<一>智能指针基础
代码1 int main(){ 裸指针,手动开辟,需要自己释放,如果忘记了或者因为 程序逻辑导致p没有释放,那么就会导致内存泄漏 int *p=new int(10); if(***){ retur -1; } delete p; ...[2022/12/2]
为什么标准库的模板变量都是inline的
最近在看标准库里的type_traits的时候发现了个有趣的地方,几乎所有在标准库里的变量模板都是inline的! 不仅常见的实现上(libstdc++、libc++、ms stl)都是inline的,标准里给的形式定义也是inline的。 比如微软开源的stl实现:https: githu...[2022/12/2]
C++集体数据交换实现示例讲解
目录一、说明二、示例和代码 一、说明 到目前为止介绍的功能共享一对一的关系:即一个进程发送和一个进程接收。链接是通过标签建立的。本节介绍在多个进程中调用相同参数但执行不同操作的函数。对于一个进程,函数可能会发送数据,对于另一个进程,它可能会接收数据。这些功能称为集体操作。 二、示例和代码 ...[2022/11/23]
C++异步数据交换实现方法介绍
异步数据交换,除了阻塞函数 send() 和 recv() 之外,Boost.MPI 还支持与成员函数 isend() 和 irecv() 的异步数据交换。名称以 i 开头,表示函数立即返回。 示例 47.7。使用 irecv() 异步接收数据 #include <boost/mpi...[2022/11/23]
C++ Boost MPI接口详细讲解
目录一、说明二、开发和运行时环境三、简单数据交换 一、说明 Boost.MPI 提供了 MPI 标准(消息传递接口)的接口。该标准简化了并发执行任务的程序的开发。您可以使用线程或通过共享内存或网络连接使多个进程相互通信来开发此类程序。 MPI 的优点是你不需要关心这些细节。您可以完全专注于并行化...[2022/11/23]
C++ Boost Lockfree超详细讲解使用方法
目录一、说明二、示例和代码 Boost.Lockfree 一、说明 Boost.Lockfree 提供线程安全和无锁容器。可以从多个线程访问此库中的容器,而无需同步访问。 在 1.56.0 版本中,Boost.Lockfree 只提供了两个容器:boost::lockfree::queu...[2022/11/23]
C++初阶(封装+多态--整理的自认为很详细)
继承 概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 语法: 基类(...[2022/11/21]
[排序算法] 快速排序 (C++) (含三种写法)
快速排序解释 快速排序 Quick Sort 与归并排序一样,也是典型的分治法的应用。 (如果有对 归并排序还不了解的童鞋,可以看看这里哟~ 归并排序)??? 快速排序的分治模式 1、选取基准值,获取划分位置。将原数组 a[l, r] 划分为两个子数组 a[l, mid - 1] 和 a[mi...[2022/11/21]
为什么你的static_assert不能按预期的工作?
static_a ert是c++11添加的新语法,它可以使我们在编译期间检测一些断言条件是否为真,如果不满足条件将会产生一条编译错误信息。 使用静态断言可以提前暴露许多问题到编译阶段,极大的方便了我们对代码的排错,提前将一些bug扼杀在摇篮里。 然而有时候静态断言并不能如我们预期的那样工作,...[2022/11/21]
Codeforces Round #834 (Div. 3) A-G
比赛链接 A 题目 知识点:模拟。 确定开头字母,然后循环比较即可。 时间复杂度 \(O(n)\) 空间复杂度 \(O(n)\) 题解 #include <bit tdc++.h> #define ll long long using namespace std; bo...[2022/11/19]
ROS应用层通信协议解析
参考:http: wiki.ros.org/ROS/Master_API http: wiki.ros.org/ROS/Connection Header 说明 ROS本质上就是一个松耦合的通信框架,通信模式包括:远程调用(service-client)、订阅发布(topic)、持续通信(a...[2022/11/19]
C++初阶(类的访问权限以及封装+this指针+构造函数+析构函数+拷贝构造函数+参数列表+友元+内部类)
面向过程与面向对象 C语言是面向过程的,关注的是过程(函数),分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 类的引入与定义 类的引入 C语言中,结构体内部只能定义变量,C++中的结构体不仅可以定义变...[2022/11/16]
C++初阶(类的访问权限以及封装+this指针+构造函数+析构函数+拷贝构造函数+参数列表+友元+内部类)
面向过程与面向对象 C语言是面向过程的,关注的是过程(函数),分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 类的引入与定义 类的引入 C语言中,结构体内部只能定义变量,C++中的结构体不仅可以定义变...[2022/11/16]
C/C++实现遍历文件夹最全方法总结
目录一、filesystem(推荐)二、io.h三、win API 一、filesystem(推荐) 在c++17中,引入了文件系统,使用起来非常方便 在VS中,可以直接在项目属性中调整: 只要是C++17即以上都可 然后头文件: #include<filesyste...[2022/9/20]
C++模板编程特性之移动语义
目录C++的值类型右值引用与移动构造和移动赋值 C++的值类型 我们知道,每个变量都有类型,或整形或字符型等来进行了分类,不仅如此,C++表达式(带有操作数的操作符、字面量、变量名等)在类型的属性上,还有一种属性,即值类别(value category)。且每个表达式只属于三种基本值尖别中的一种...[2022/8/23]
C++数据结构之二叉搜索树的实现详解
目录前言介绍实现节点的实现二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除总结 前言 今天我们来学一个新的数据结构:二叉搜索树。 介绍 二叉搜索树也称作二叉排序树,它具有以下性质: 非空左子树的所有键值小于其根节点的键值非空右子树的所有键值大于其根节点的键值左,右子树都是二叉搜索树 ...[2022/8/22]
C++示例分析内联函数与引用变量及函数重载的使用
目录1.内联函数1.1为什么使用内联函数1.2语法2.引用变量2.1为什么要使用引用变量2.2语法2.3对于C语言的改进3. 函数重载3.1默认参数3.2函数重载 1.内联函数 1.1为什么使用内联函数 减少上下文切换,加快程序运行速度。是对C语言中的宏函数的改进。 1.2语法 #in...[2022/8/22]
C/C++函数指针深入探究
目录函数指针语法函数地址声明使用函数指针调用函数深入理解函数指针使用typedef 简化 函数指针 为什么要使用函数指针? 调用的灵活性和通用性。 试想一下,我们在设计初期并不知道我们的函数的具体实现细节。例如,我们我们想要一个排序函数qsort,但是具体排序法则我们并不确定,是降序还是升...[2022/8/22]
C++实例分析讲解临时对象与右值引用的用法
目录1.什么是临时变量2.右值引用2.1概念2.2代码实现2.3C++11新特性之移动构造2.3.1移动构造函数的介绍2.3.2代码实现 1.什么是临时变量 在栈上定义对象时,当只调用类中的构造函数时,编译器将在栈上创建一个临时对象,这个临时对象没有地址。所以他的生命周期非常短。短到下一行代码就...[2022/8/16]
详解C++异常处理机制示例介绍
目录1.C++异常处理的套路2.C++标准异常库中常用的几个异常处理类2.1异常类的例子2.2封装一个自定义异常类 1.C++异常处理的套路 C++异常处理机制之抛出异常关键字:throw throw关键字的使用: 在哪可能出现异常就在哪里使用throw关键字抛出异常。 这个异常可以使用...[2022/8/16]