
C++入门及项目实战宝典
文章平均质量分 87
从事技术研发10多年,有丰富的线上项目实战和实施经验,本小博乃点滴工作及项目实战总结积累,精华知识记录, 从入门到进阶,绝对物超所值,内容通俗易懂,代码,正版工具软件,开发文档精中选精,一应俱全,微信、QQ提供在线指点和帮助。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
C++中箭头操作符(->)和点操作符(.)有什么不同?
最后,总结一下,点操作符()用于直接访问对象的成员,而箭头操作符(->)用于通过对象的指针访问成员。选择使用哪一个操作符,取决于你是直接拥有对象还是拥有指向对象的指针。了解这两个操作符的区别对于编写清晰且高效的C++代码至关重要。希望通过本文的解释和示例,对大家尤其是C++初学的小伙伴能有所帮助,能更好地在项目中正确使用这两个操作符。原创 2024-04-13 15:43:52 · 1289 阅读 · 1 评论 -
奇校验及校验和的帧校验机制详解
此代码首先定义了设置奇校验位的setOddParity函数,然后定义了计算校验和的calculateChecksum函数。在main函数中,我们创建了一个示例数据帧,并打印出带有奇校验和校验和的结果。采用奇校验及校验和的帧校验机制,可以增加数据传输的可靠性。在这种机制下,每个数据字节包含一个用于奇校验的校验位,确保每个字节中“1”的数量为奇数。此外,在每个数据帧的末尾添加一个校验和字节,这个校验和是除通讯标志外的所有字节(包括数据和校验位)之和的补码。以下是采用奇校验及校验和机制的。原创 2024-04-13 14:55:03 · 535 阅读 · 0 评论 -
C++单目,双目,三目运算符
运算符是C++编程中基本的工具,理解和正确使用它们对于编写有效、可读的代码至关重要。原创 2024-04-13 14:28:18 · 1202 阅读 · 1 评论 -
C++异常处理机制详解
throw Exception(1,"错误!");C++的异常处理机制是一个强大的特性,它在正确使用时可以极大地增强程序的健壮性和错误处理能力。帮助我们写出质量更高的C++代码。原创 2024-04-13 14:23:30 · 634 阅读 · 0 评论 -
fopen文件操作详解(全网最全)
fopen通过对fopen的各种模式标识符的深入了解和正确使用,可以使文件操作在C程序中既安全又高效。希望本文能帮助大家更好地掌握这一工具,优化编程实践。原创 2024-04-13 11:29:30 · 2227 阅读 · 1 评论 -
C++开源库大全
程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。原创 2024-04-13 10:18:40 · 600 阅读 · 0 评论 -
C++内存泄露处理方法
在使用C++进行软件开发时,内存管理是一个核心且不可回避的问题。不当的内存管理不仅会导致内存泄露,还可能引发程序的不稳定甚至崩溃。本文将详细探讨C++中内存泄露的成因、诊断方法以及预防和修复策略,以提高开发者在实际工作中对内存管理的掌控能力。内存泄露指的是程序在申请内存后,未能在不再使用它时正确释放,导致内存资源无法被再次有效利用。长时间运行的程序如果存在内存泄露,将会逐渐消耗完系统所有可用内存,影响程序性能,甚至导致程序和系统的崩溃。正确管理内存是C++编程中至关重要的技能。原创 2024-04-13 10:17:43 · 429 阅读 · 0 评论 -
C++常量变量作用域及使用详解
对一个C++变量来说,有两个属性非常重要:作用域和生命周期,它们从两个不同的维度描述了一个变量--时间和空间。顾名思义,作用域就是一个变量可以被引用的范围,如:全局作用域、文件作用域、局部作用域;而生命周期就是这个变量可以被引用的时间段。不同生命周期的变量,在程序内存中的分布位置是不一样的。一个程序的内存分为代码区、全局数据区、堆区、栈区,不同的内存区域,对应不同的生命周期。在C++中,变量的作用域和生命周期是两个核心概念,它们定义了变量何时可以被程序访问以及变量存在的时间长度。原创 2024-04-05 22:16:28 · 153 阅读 · 1 评论 -
C++ Boost ASIO网路通信库
Boost ASIO(Asynchronous I/OLibrary)是Boost库的一部分,由Andrei Alexandrescu创建。它设计用于解决网络和低级通信问题,特别是异步I/O,使开发人员能够轻松地编写高性能的网络应用程序。ASIO的核心理念是提供一个简洁且易于使用的接口,同时保持底层的性能和灵活性。Boost ASIO是一个强大且灵活的网络通信库,其异步I/O模型使得网络编程变得更加简单高效。虽然学习曲线可能会稍有陡峭,但一旦熟悉,它将极大地提升我们的网络编程能力。在实际项目中,结合。原创 2024-04-05 21:41:48 · 236 阅读 · 1 评论 -
C++模板类 容器之map及对象副本 深/浅拷贝等问题浅析
(1).一个未命名的临时string 对象被构造并传递给与map 类相关联的下标操作符,这个对象用Anna 初始化,(2).在word_count 中查找Anna 项,没有找到(3) .一个新的键/值对被插入到word_count 中。当然键是一个string对象持有“Anna”。但是值不是1而是0(4).插入完成接着值被赋为1用下标操作符把map 初始化至一组元素集合,会使每个值都被初始化为缺省值。然后再被赋值为显式的值,如果元素是类对象而且它的缺省初始化和赋值的运算量都很大。原创 2024-03-25 22:18:35 · 314 阅读 · 0 评论 -
浅谈加密技术
通过我们的了解,对称加密的实现比较简单,但是安全性不是很高,一般用在对安全要求级别不是很高的情况下,但是非对称加密比较复杂,但是安全性很高,在实际应用中需要我们综合利弊考虑.原创 2024-03-10 21:42:28 · 125 阅读 · 0 评论 -
C++项目管理
弱耦合的模块可以在不同的 git repo(svn库)里,比如 alicpp的三方库,甚至于一些二方库,它们可以有自己的 git repo,只要我们有办法找到他们的 include 和 lib就可以和它们对接编译和链接,我们也可以从容的针对它们的不同版本进行引进,非常长期的做版本升级工作。并不是让我们每天都发布,适当的控制风险是必要的,但是可以认为任何超过一个月的发布都是拖沓的和缓慢的,我们控制风险靠的是测试集群的设立,尽可能模拟线上环境的测试,灰度发布,等等手段,其中没有一个是“等待”。原创 2024-02-18 22:31:11 · 1063 阅读 · 0 评论 -
Visual Studio 必知快捷键指南
(1).按“Ctrl+Tab”键,打开IDE导航窗口,按住Ctrl键,同时用方向键或鼠标选中一个文件或工具窗体来激活。(1).菜单:按“Ctrl+Alt+Down”显示“文件下拉菜单”,可以通过上下的方向键来选择文件打开文件。(1).在代码块的任意位置,按“Ctrl+m,Ctrl+m” ,可以折叠或展开光标所在代码块。(1).按Ctrl+Shift+U 将当前字符或选中的字符转换为大写;(1).设置或取消书签:Ctrl+K, Ctrl+K;(2).转到下一书签:Ctrl+K, Ctrl+N;原创 2024-02-18 22:30:33 · 2175 阅读 · 0 评论 -
C++序列化简析
CArchive类是VisualC++程序设计中最常用的文件处理的方法,CArchive类不仅可以实现简单数据结构的读写操作,还可以通过对CObiect类的派生实现对复杂数据结构的读写操作,因此,利用CArchive类,可以轻松实现任意数据结构的序列化。在使用基于OTT的数据库结构的程序进行性能测试时,由于读入的PNR数据是XML格式的文档,所以,读入XML文件到内存,将其转为DOM树,继而将DOM树中的数据转化为OTT数据库所需要的对象结构,需要耗费大量的时间。如果估计大了,又会造成空间的浪费。原创 2024-01-28 13:02:44 · 289 阅读 · 0 评论 -
单例模式及其线程安全详解
单例模式是一种常用的软件设计模式,它保证一个类在程序运行期间只有一个实例,并提供一个全局访问点。这种模式常用于需要频繁创建和销毁的对象,以及提供全局访问点的场景。优点:在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的,执行效率高,性能好,没有锁。缺点:因为不支持延迟加载,如果实例占用资源多(比如占用内存多)或初始化耗时长(比如需要加载各种配置文件),提前初始化实例是一种浪费资源的行为。优点:支持延迟加载,节省内存,线程安全。原创 2023-02-28 22:35:27 · 551 阅读 · 0 评论 -
多线程访问共享资源的解决方案
在多线程编程中,合理地同步对共享资源的访问是至关重要的。了解和选择合适的同步机制可以帮助避免数据竞争和死锁等问题,确保程序的稳定和高效。C++标准库提供了多种同步原语,如互斥锁、读写锁和条件变量等,它们是线程安全编程的有力工具。在实践中,应当根据具体的应用场景选择合适的同步机制,注意锁的使用,并保持对性能的考虑。通过精心设计和测试,我们能够开发出既安全又高效的多线程应用程序。原创 2023-02-28 22:34:48 · 1363 阅读 · 0 评论 -
C++左值和右值深入解析
定义左值是指那些表达式后可以找到持久存储位置的对象。简而言之,左值是可以取地址的表达式,通常代表内存中的一个固定位置。右值是指那些表达式不指向任何持久存储位置的对象。右值通常是临时的,无法取得它们的地址,它们旨在用于立即的赋值或计算。左值和右值是C++中两种主要的表达式类型,它们分别代表了可以持久存在的对象和临时的值。左值引用和右值引用是C++11引入的两个强大的工具,它们使得我们能够更精准地控制对象的资源,实现更高效的资源管理(比如通过移动语义)。原创 2022-11-30 21:30:52 · 809 阅读 · 0 评论 -
C++智能指针使用详解
shared_ptr对象能够初始化实际指向一个地址内容而weak_ptr对象没办法直接初始化一个具体地址,它的对象需要由shared_ptr去初始化weak_ptr不会影响shared_ptr的引用计数,因为它是一个弱引用,只是一个临时引用指向shared_ptr。即使用shared_ptr对象初始化weak_ptr不会导致shared_ptr引用计数增加。依此特性可以解决shared_ptr的循环引用问题。原创 2022-11-30 21:30:32 · 2956 阅读 · 0 评论 -
每个C++开发者都应该使用的十个C++11特性
C++11包含了很多内容,以上内容只是对一系列C++核心技术以及标准库特征的用法的简单介绍,如果想要更深入的了解,大家可以再根据每个知识点找一些更加细节的资料区深入学习。原创 2022-10-30 20:45:01 · 1493 阅读 · 0 评论 -
数据校验及校验和总结
1.校验和(Checksum)总和检验码,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。2.数据校验的作用数据校验是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的。保证数据的完整性和准确性。3.常用的校验和(Checksum) 算法总结(1).最简单的校验...原创 2022-01-30 22:18:01 · 5119 阅读 · 2 评论 -
网络数据传输的封装总结
数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程。在OSI七层参考模型中,每层主要负责与其它机器上的对等层进行通信。该过程是在协议数据单元(PDU)中实现的,其中每层的PDU一般由本层的协议头、协议尾和数据封装构成。原创 2022-01-30 21:38:54 · 5149 阅读 · 0 评论 -
网络协议数据解析
1、网络数据解析我们在实际应用中,网络数据解析是非常常见的一种数据处理方式,那么有没有比较通用的数据解析处理方法呢,以下是个人总结的一种网络数据解析处理方法2、数据包格式 图1-1是一个比较通用的数据包格式,本次数据解析模型以下图的数据格式为准:3、代码实现int ReceiveFromRemoteEndPoint(){ int nPackageDataLength = 0; char *szPackageCleaner = NULL;...原创 2022-01-30 21:35:34 · 3668 阅读 · 0 评论 -
git submodule update --init 和 --remote的区别
当使用Git作为版本控制系统时,有时我们需要在项目中使用子模块(submodule)来引用其他项目的特定版本。Git子模块允许我们将一个Git仓库嵌套在另一个Git仓库中,并且可以独立地管理和更新子模块。在使用Git子模块时,我们通常需要执行两个关键的操作:初始化子模块和更新子模块。这两个操作可以通过`git submodule update --init`和`git submodule update --remote`命令来完成。原创 2021-02-28 19:33:14 · 4183 阅读 · 0 评论 -
Mac 安装 CMake 配置及环境配置
下载并安装CMake从CMake官网下载下载dmg文件并安装我这里下载的是10.13最新版本:配置命令行安装完成后打开程序:在菜单栏Tools选项里选择How to install For Command Line Use按照说明配置环境变量即可任选一中:这里选择第二种安装方式:在命令行里输入 cmake 就可以看到相关提示:命令行中输入cmake --version反馈结果类似如下:证明配置成功了。...原创 2021-02-28 19:32:18 · 5702 阅读 · 0 评论 -
STL Set使用总结
C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 今天我们说说STL的set,必须说明的是set关联式容...原创 2020-11-29 22:22:15 · 320 阅读 · 0 评论 -
STL Queue使用总结
1.STL Queue使用简介 C++ STL 之所以得到广泛使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 今天我们说说STL的Queue,Queu...原创 2020-11-29 22:21:58 · 520 阅读 · 0 评论 -
iOS 视频直播开发笔记(六)
在视频直播中,为了提高视频编码效率,可以对数据进行适当的转换,再送编码器,iOS对NV12的数据编码效率最高,以下是YUV420P互转NV12,NV21的简单算法。1.YUV420P转NV12void YUV420PtoNV12(unsigned char *Src, unsigned char* Dst,int Width,int Height){unsigned char* SrcU = Src + Width * Height;unsigned char* SrcV...原创 2020-09-30 20:52:08 · 355 阅读 · 0 评论 -
YUV2RGB快速算法分析
YUV实际是YcrCb了,YUV2RGB的转换公式本身是很简单的,但是牵涉到浮点运算,所以,如果要实现快速算法,算法结构本身没什么好研究的了,主要是采用整型运算或者查表来加快计算速度。 首先可以推导得到转换公式为:R = Y + 1.4075 *(V-128)G = Y – 0.3455 *(U –128) – 0.7169 *(V –128)B = Y...原创 2020-03-29 21:59:00 · 1493 阅读 · 0 评论 -
RGB转YUV原理及代码验证
我们在视频数据传输前,都要使用相应的压缩算法来转换压缩数据,比如压缩成H264和H265,这两种基本上都是在YUV颜色空间上进行的。但是如果采集源采集的数据不是YUV的,在压缩前就需要转换,例如摄像头采集的资源是RGB的,那么首先要转换为YUV,再进行压缩。 在了解压缩算法之前,先看一下颜色空间转换的原理。以1920*1080的一帧图像为例RGB24的排列方式如下...原创 2020-03-29 21:57:40 · 1095 阅读 · 0 评论 -
FFmpeg 命令行工具
ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择在FFmpeg 官网可以下载对应平台的可执行程序包,比如 Windows 平台的下载地址是:https://ffmpeg.zeranoe.com/builds/下载解压后就能在 bin 文件夹下能看到三个可...原创 2020-02-29 21:32:51 · 534 阅读 · 0 评论 -
volatile关键字
volatile是一个类型修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。原创 2020-02-29 21:32:24 · 295 阅读 · 0 评论 -
图像颜色空间详解
自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等。 对于...原创 2020-02-28 22:19:59 · 3091 阅读 · 0 评论 -
C++宏定义和宏定义函数使用总结--C++面试细节(3)
C++中的宏定义是预处理指令,用于在编译之前对源代码进行简单的文本替换。宏定义可以大致分为两类:对象宏(Object Macros)和函数宏(Function Macros)。宏定义由预处理器处理,而不是编译器,因此它们在编译过程中的早期被处理。宏定义提供了一种强大的方式来执行条件编译和代码重用,但应谨慎使用,以免导致代码维护困难。随着C++标准的发展,许多宏的用例可以用模板、内联函数和constexpr表达式等现代特性更安全地实现。原创 2020-02-27 21:00:21 · 259 阅读 · 1 评论 -
assert()函数用法详解--C++面试细节(2)
函数是 C 和 C++语言中的一个宏,它用于辅助调试程序。它主要用来检查程序中的假设是否为真,如果假设为假(即表达式结果为假,或者说为0),则 会让程序终止并打印一条错误信息。assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行。 函数的原型定义如下: 3.典型使用 在 C++ 中,assert() 宏定义在 头文件中,在 C 语言中是 。使用 assert() 的典型方式如下: ass原创 2020-02-27 20:59:37 · 249 阅读 · 1 评论 -
FFmpeg代码实现视频转jpg图片
如何把视频保存成图片呢?其实我们很早就知道,视频实际上就是由一帧帧的图像组成,只不过是动起来的图像,那么就不难理解怎么把视频存成图片了。在这里,我使用了FFmpeg编解码的方式,处理流程如下: 先看看,我的处理流程: (1).打开视频文件;(2)获取视频流;(3)找到对应的解码器;(4).初始化解码器上下文;(5).设置编解码器参数;(6)打开解码器;(7)读取...原创 2020-01-31 22:35:53 · 4952 阅读 · 2 评论 -
FFmpeg—avformat_open_input()函数详解
pts 是显示的时间 dts是解码的时间, 这个时间是用来做同步。av_register_all(), 注册所有的格式。包括解封装格式和加封装格式。 avformat_network_init(), 用于初始化网络。FFmpeg本身也支持解封装RTSP的数据,如果要解封装网络数据格式,则可调用该函数。 avformat_open_input()。打开一个文件并解析。可解析的内容包括:视频流...原创 2020-01-31 22:35:53 · 2282 阅读 · 0 评论 -
FFmpeg常用API总结
常用 API 分析通用 APIav_register_all 编译配置(--enable、--disable) FFmpeg 的时候,会生成两个文件:config.mk、config.h。config.mk 会实际上就是 makefile 文件需要包含进去的子模块,会作用在编译阶段,帮助开发者便宜出正确的库;而 config.h 是作用在运行阶段,这一阶段将确保需要注册哪些容器以...原创 2020-01-31 22:35:40 · 950 阅读 · 0 评论 -
AV1 码流分析器的搭建
作为HEVC比较热门的继承者,AOM推进的AV1在2018年进入了大家的视野。研究AV1的新编码工具离不开一个强大的码流分析工具。AOM 得益于开源社区的贡献,其码流分析工具也在同步的推出,给研究AV1新编码工具的小伙伴带来省去不少麻烦。本文主要简单介绍一下如何搭建一个本地的AV1码流分析工具以及在大家过程中遇到的问题。1. AV1码流分析工具简单介绍AV1码流分析工...转载 2020-01-30 22:19:35 · 2756 阅读 · 0 评论 -
AV1编解码器的编译使用
1.什么是AV1格式? AV1是一种全新的图片格式,我们可以使用这种格式把图片压缩很多,而且不会损失图片的质量。AV1是一种开源的,免费的,下一代视频编码格式,来自开放媒体视频联盟。它旨在取代谷歌的VP9,与H.265/HEVC竞争。AV1的目标是在VP9/HEVC上提高约30%,仅在编码和回放复杂度上合理增加。尽管在正式推出AV1的时候我们才能知道编解码器的性能,但是AOM的强力...原创 2020-01-30 22:06:41 · 13560 阅读 · 1 评论 -
AAC编解码简析
AAC,全称Advanced Audio Coding,是一种专为声音数据设计的文件压缩格式。与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的“性价比”。利用AAC格式,可使人感觉声音质量没有明显降低的前提下,更加小巧。AAC解码流程图:...原创 2019-12-29 22:57:41 · 1362 阅读 · 0 评论