C++入门及项目实战宝典
文章平均质量分 87
从事技术研发10多年,有丰富的线上项目实战和实施经验,本小博乃点滴工作及项目实战总结积累,精华知识记录, 从入门到进阶,绝对物超所值,内容通俗易懂,代码,正版工具软件,开发文档精中选精,一应俱全,微信、QQ提供在线指点和帮助。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
C++开源库大全
程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。原创 2024-04-13 10:18:40 · 236 阅读 · 0 评论 -
C++内存泄露处理方法
在使用C++进行软件开发时,内存管理是一个核心且不可回避的问题。不当的内存管理不仅会导致内存泄露,还可能引发程序的不稳定甚至崩溃。本文将详细探讨C++中内存泄露的成因、诊断方法以及预防和修复策略,以提高开发者在实际工作中对内存管理的掌控能力。内存泄露指的是程序在申请内存后,未能在不再使用它时正确释放,导致内存资源无法被再次有效利用。长时间运行的程序如果存在内存泄露,将会逐渐消耗完系统所有可用内存,影响程序性能,甚至导致程序和系统的崩溃。正确管理内存是C++编程中至关重要的技能。原创 2024-04-13 10:17:43 · 268 阅读 · 0 评论 -
C/C++经典面试题型总结
C/C++面试,你需要掌握的不仅是编辑C++语言的基础知识、以及在实际项目中如何应用这些知识。下面是我整理的一些C/C++经典面试题,分享给大家,希望对大家有帮助,并预祝各位正在面试的小伙伴面试顺利并找到理想的工作!1.定义一个”数据类型” datatype类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。int i;float f;原创 2018-03-25 22:18:45 · 73 阅读 · 1 评论 -
360C++面试总结
本来视频面试,后来他说他那边有问题,就电话面试1. 自我介绍2. 问了下hadoop, 研究生有学过没,storm和spark的区别3. 讲下memcached, memcached集群中有一个节点失效了,怎么处理,哈希一致性算法实现;4. 看了libevent,讲下同步,异步,阻塞,非阻塞的区别5. 有了解服务端开发的相关技术吗,讲下;6. 有github账号吗,有看源代码吗7. 问了我喜欢做服务端的哪方面;8. 有用过哪些数据库原创 2018-03-18 20:57:34 · 56 阅读 · 0 评论 -
C++经典面试题总结(二)
51. 引用与指针有什么区别?答 、1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。52. 描述实时系统的基本特性答 、在特定时间内完成特定的任务,实时性与可靠性。54. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答 、全局变量储存在静态数据区,局部变量在堆栈中。55. 堆栈溢出一般是由什么原因导致的?答 、没有回收垃圾资源56. 什么函数不能声明为虚函数?原创 2018-03-18 20:57:16 · 40 阅读 · 1 评论 -
C++经典面试题总结(一)
C++语言相比较其它语言而言,相对来说比较难的,而且面试细节巨多,本篇博客我对C++的常见必考经典面试题做了一个总结,希望对大家有帮助,预祝各位即将面试的同学能够找到自己心仪的工作。1.面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。2. 什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。3. 对象都具有的两方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。原创 2018-03-18 20:55:49 · 36 阅读 · 1 评论 -
C++字符串操作总结
string类的常用方法有哪些。string查找替换、分割字符串、比较、截取、类型转换、排序等功能都提供了强大的处理函数,可以代替字符数组来使用。1.定义和构造初始化2.string 提供了很多构造函数,可以以多种方式来初始化string字符串3.赋值,拼接字符串string重载了 = + += 等多种运算符,让字符串组合拼接更简单4.访问字符操作string可以按数组方式,以下标来访问。还可以用at()函数访问指定的字符5.可以使用 STL 的接口。原创 2018-03-18 20:55:34 · 53 阅读 · 0 评论 -
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 · 195 阅读 · 0 评论 -
C++项目管理
弱耦合的模块可以在不同的 git repo(svn库)里,比如 alicpp的三方库,甚至于一些二方库,它们可以有自己的 git repo,只要我们有办法找到他们的 include 和 lib就可以和它们对接编译和链接,我们也可以从容的针对它们的不同版本进行引进,非常长期的做版本升级工作。并不是让我们每天都发布,适当的控制风险是必要的,但是可以认为任何超过一个月的发布都是拖沓的和缓慢的,我们控制风险靠的是测试集群的设立,尽可能模拟线上环境的测试,灰度发布,等等手段,其中没有一个是“等待”。原创 2024-02-18 22:31:11 · 960 阅读 · 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 · 1845 阅读 · 0 评论 -
C++序列化简析
CArchive类是VisualC++程序设计中最常用的文件处理的方法,CArchive类不仅可以实现简单数据结构的读写操作,还可以通过对CObiect类的派生实现对复杂数据结构的读写操作,因此,利用CArchive类,可以轻松实现任意数据结构的序列化。在使用基于OTT的数据库结构的程序进行性能测试时,由于读入的PNR数据是XML格式的文档,所以,读入XML文件到内存,将其转为DOM树,继而将DOM树中的数据转化为OTT数据库所需要的对象结构,需要耗费大量的时间。如果估计大了,又会造成空间的浪费。原创 2024-01-28 13:02:44 · 218 阅读 · 0 评论 -
单例模式及其线程安全详解
单例模式是一种常用的软件设计模式,它保证一个类在程序运行期间只有一个实例,并提供一个全局访问点。这种模式常用于需要频繁创建和销毁的对象,以及提供全局访问点的场景。优点:在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的,执行效率高,性能好,没有锁。缺点:因为不支持延迟加载,如果实例占用资源多(比如占用内存多)或初始化耗时长(比如需要加载各种配置文件),提前初始化实例是一种浪费资源的行为。优点:支持延迟加载,节省内存,线程安全。原创 2023-02-28 22:35:27 · 503 阅读 · 0 评论 -
多线程访问共享资源的解决方案
在多线程编程中,合理地同步对共享资源的访问是至关重要的。了解和选择合适的同步机制可以帮助避免数据竞争和死锁等问题,确保程序的稳定和高效。C++标准库提供了多种同步原语,如互斥锁、读写锁和条件变量等,它们是线程安全编程的有力工具。在实践中,应当根据具体的应用场景选择合适的同步机制,注意锁的使用,并保持对性能的考虑。通过精心设计和测试,我们能够开发出既安全又高效的多线程应用程序。原创 2023-02-28 22:34:48 · 1302 阅读 · 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 · 2881 阅读 · 0 评论 -
C++左值和右值深入解析
定义左值是指那些表达式后可以找到持久存储位置的对象。简而言之,左值是可以取地址的表达式,通常代表内存中的一个固定位置。右值是指那些表达式不指向任何持久存储位置的对象。右值通常是临时的,无法取得它们的地址,它们旨在用于立即的赋值或计算。左值和右值是C++中两种主要的表达式类型,它们分别代表了可以持久存在的对象和临时的值。左值引用和右值引用是C++11引入的两个强大的工具,它们使得我们能够更精准地控制对象的资源,实现更高效的资源管理(比如通过移动语义)。原创 2022-11-30 21:30:52 · 755 阅读 · 0 评论 -
每个C++开发者都应该使用的十个C++11特性
C++11包含了很多内容,以上内容只是对一系列C++核心技术以及标准库特征的用法的简单介绍,如果想要更深入的了解,大家可以再根据每个知识点找一些更加细节的资料区深入学习。原创 2022-10-30 20:45:01 · 1424 阅读 · 0 评论 -
数据校验及校验和总结
1.校验和(Checksum)总和检验码,校验和。在数据处理和数据通信领域中,用于校验目的的一组数据项的和。这些数据项可以是数字或在计算检验总和过程中看作数字的其它字符串。2.数据校验的作用数据校验是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的。保证数据的完整性和准确性。3.常用的校验和(Checksum) 算法总结(1).最简单的校验...原创 2022-01-30 22:18:01 · 4731 阅读 · 2 评论 -
网络数据传输的封装总结
数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程。在OSI七层参考模型中,每层主要负责与其它机器上的对等层进行通信。该过程是在协议数据单元(PDU)中实现的,其中每层的PDU一般由本层的协议头、协议尾和数据封装构成。原创 2022-01-30 21:38:54 · 4974 阅读 · 0 评论 -
网络协议数据解析
1、网络数据解析我们在实际应用中,网络数据解析是非常常见的一种数据处理方式,那么有没有比较通用的数据解析处理方法呢,以下是个人总结的一种网络数据解析处理方法2、数据包格式 图1-1是一个比较通用的数据包格式,本次数据解析模型以下图的数据格式为准:3、代码实现int ReceiveFromRemoteEndPoint(){ int nPackageDataLength = 0; char *szPackageCleaner = NULL;...原创 2022-01-30 21:35:34 · 3540 阅读 · 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 · 3845 阅读 · 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 · 5427 阅读 · 0 评论 -
STL Set使用总结
C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 今天我们说说STL的set,必须说明的是set关联式容...原创 2020-11-29 22:22:15 · 282 阅读 · 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 · 469 阅读 · 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 · 305 阅读 · 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 · 1429 阅读 · 0 评论 -
RGB转YUV原理及代码验证
我们在视频数据传输前,都要使用相应的压缩算法来转换压缩数据,比如压缩成H264和H265,这两种基本上都是在YUV颜色空间上进行的。但是如果采集源采集的数据不是YUV的,在压缩前就需要转换,例如摄像头采集的资源是RGB的,那么首先要转换为YUV,再进行压缩。 在了解压缩算法之前,先看一下颜色空间转换的原理。以1920*1080的一帧图像为例RGB24的排列方式如下...原创 2020-03-29 21:57:40 · 1028 阅读 · 0 评论 -
AAC编解码简析
AAC,全称Advanced Audio Coding,是一种专为声音数据设计的文件压缩格式。与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的“性价比”。利用AAC格式,可使人感觉声音质量没有明显降低的前提下,更加小巧。AAC解码流程图:...原创 2019-12-29 22:57:41 · 1222 阅读 · 0 评论 -
杜比TrueHD(Dolby TrueHD)音频编码解析
杜比®TrueHD是专为高清光盘媒体所开发的下一代无损压缩技术。该技术所提供的绝佳音频与清晰度最高的录音棚母带毫无二致,让下一代光盘给你带来真正的高清娱乐体验。配合高清晰度的影像,杜比TrueHD技术能够提供前所未有的家庭影院体验,让您能够享受与高清晰度图像一样令人惊叹的声音。二、特点。原创 2019-12-29 22:56:48 · 6407 阅读 · 0 评论 -
FFmpeg 源码结构简析
FFMPEG中结构体很多。最关键的结构体可以分成以下几类:a) 解协议(http,rtsp,rtmp,mms)AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)b) 解封装(flv,avi,rmvb,mp4)AVFormatContext主要存储视音频封装格式中包含的信息;AVInp原创 2019-12-29 22:25:35 · 338 阅读 · 0 评论 -
Windows安装编译VLC
一般情况下,我们在Windows下编译VLC常用方法有两种:1、Msys+MinGW2、Cygwin 使用第一种方法: 二者大同小异,下面主要介绍Cygwin的方式编译VLC。Cygwin是一个在Windows下面模拟Linux环境的东西。它提供了很多库和应用程序,让你可以像在Linux上一样来使用Windows。到官网下载Cygwin的安...原创 2019-12-29 21:52:28 · 1439 阅读 · 0 评论 -
NASM基本指令集的语法、语义及C++转NASM详解
对于学习和从事计算机和电子相关专业的人,汇编是绕不过的一个“坎”,很多人觉得太复杂,其实仔细看语法和语义,无非就是按部就班固定的东西,现在我们详细看看汇编的语法和语义,以下部分参考Github上的1.MOV-Move/Copy将一个寄存器或者内存单元里面的内容拷贝到另一个寄存器或者内存单元中,或者将内存单元中的值、寄存器中的变量赋值为立即数。sy:movde...原创 2019-12-28 22:06:45 · 1980 阅读 · 0 评论 -
FFmpeg的几种版本使用总结
Fmpeg 全名是Fast Forward MPEG(Moving Picture Experts Group),是一个集成了各种编解码器的库。FFmpeg也是目前主流的多媒体框架,可以实现图像信息的编码,解码,转码,复用,解复用,流,过滤,视频采集、视频编码到视频传输,都可以调用FFmpeg这个库中的代码来完成。。它支持最多种类的编码格式。无论他们是由某个标准委员会,社区或公司...原创 2019-12-29 22:02:45 · 12074 阅读 · 0 评论 -
浅谈加密技术
通过我们的了解,对称加密的实现比较简单,但是安全性不是很高,一般用在对安全要求级别不是很高的情况下,但是非对称加密比较复杂,但是安全性很高,在实际应用中需要我们综合利弊考虑.原创 2024-03-10 21:42:28 · 72 阅读 · 0 评论 -
HEVC/H265编码原理
HEVC/H265是新一代高效视频编码器,视频编码标准的编码框架仍采用传统的混合编码框架,包括预测、变换、量化、熵编码、环路滤波。但HEVC几乎在每个模块都引入了新的编码技术。增加了基于四叉树的块划分、35中帧内预测、帧间merge、AMVP技术、可变尺寸DCT变换、cabac、环路滤波增加了SAO等。1.HEVC的Profiles(档次),Levels(级别),T...原创 2019-12-29 22:25:30 · 9357 阅读 · 1 评论 -
FFmpeg常用API总结
常用 API 分析通用 APIav_register_all 编译配置(--enable、--disable) FFmpeg 的时候,会生成两个文件:config.mk、config.h。config.mk 会实际上就是 makefile 文件需要包含进去的子模块,会作用在编译阶段,帮助开发者便宜出正确的库;而 config.h 是作用在运行阶段,这一阶段将确保需要注册哪些容器以...原创 2020-01-31 22:35:40 · 888 阅读 · 0 评论 -
FFmpeg 命令行工具
ffmpeg 是强大的媒体文件转换工具,常用于转码,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择在FFmpeg 官网可以下载对应平台的可执行程序包,比如 Windows 平台的下载地址是:https://ffmpeg.zeranoe.com/builds/下载解压后就能在 bin 文件夹下能看到三个可...原创 2020-02-29 21:32:51 · 482 阅读 · 0 评论 -
assert()函数用法详解--C++面试细节(2)
函数是 C 和 C++语言中的一个宏,它用于辅助调试程序。它主要用来检查程序中的假设是否为真,如果假设为假(即表达式结果为假,或者说为0),则 会让程序终止并打印一条错误信息。assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行。 函数的原型定义如下: 3.典型使用 在 C++ 中,assert() 宏定义在 头文件中,在 C 语言中是 。使用 assert() 的典型方式如下: ass原创 2020-02-27 20:59:37 · 162 阅读 · 1 评论 -
图像颜色空间详解
自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等。 对于...原创 2020-02-28 22:19:59 · 2970 阅读 · 0 评论 -
AV1 码流分析器的搭建
作为HEVC比较热门的继承者,AOM推进的AV1在2018年进入了大家的视野。研究AV1的新编码工具离不开一个强大的码流分析工具。AOM 得益于开源社区的贡献,其码流分析工具也在同步的推出,给研究AV1新编码工具的小伙伴带来省去不少麻烦。本文主要简单介绍一下如何搭建一个本地的AV1码流分析工具以及在大家过程中遇到的问题。1. AV1码流分析工具简单介绍AV1码流分析工...转载 2020-01-30 22:19:35 · 2638 阅读 · 0 评论 -
音视频编解码开源项目大汇总
在音视频编解码领域,有很多优秀的开源项目值得我们去学习研究。在开发过程中,我们可能会学习借鉴这些开源项目,来提高开发效率。下面介绍一些常用的音视频开源项目。转载 2019-12-29 21:53:26 · 2277 阅读 · 0 评论