自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (7)
  • 收藏
  • 关注

原创 函数指针和成员函数指针

1、函数指针(1)定义int (*pFunc1)(int param1,int param2);typedef int (*TFunc)(int param1,int param2);TFunc pFunc2;(2)赋值和调用int Add(int param1,int param2);pFunc1 = Add;pFunc1(1,2);pFunc2 = Add...

2020-03-18 09:42:11 612

转载 C++类模板

一、定义(1)类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能比如: 数组类,链表类,Queue类,Stack类等(2)类模板和函数模板一样,定义和实现必须都在头文件中(3)类模板中的成员函数可以在类外进行实现,但是必须加上template<typename T>的声明,以及模板类型的声明template<typen...

2020-03-13 15:39:59 411

转载 C++函数模板

一、定义(1)通过template关键字来声明使用模板(2)通过typename或者class关键字来定义模板类型template<typename T1, typename T2>void Func(T1 objT1, T2 objT2){//函数内部逻辑省略}二、调用(1)自动调用int a = 0;int b = 10;Func(a...

2020-03-13 14:58:43 164

转载 define中#、##、#@分别表示什么

1. #字符串化,例如:#define LogMessage(a) printf("The message is: %s", #a); LogMessage(WARNING) //The message is:WARNINGstring ppp="abcdef";LogMessage(ppp) //The message is: ppp; not "abc...

2020-03-12 16:52:35 1053

原创 大小端模式和结构体中成员变量的内存分布

一.大端模式和小端模式计算机系统中,每个地址单元对应一个字节(8bit),一种数据类型可能占用多个字节,如何安排这种数据类型中的每个字节,哪个字节在低地址,哪个在高地址,以及每个字节中比特序在内存中的位置,这就涉及到大小端模式。一般情况下,字节序和比特序的排列规则是一致的。我们在书写和计算中数据数据分为高位和低位,高位在左边,低位在右边,例如0x6401中,0x64为高位,0x01为低位。...

2020-03-10 13:58:33 3319 1

转载 C++11--匿名函数(Lambda函数)

一、定义lambda是一种匿名函数,即没有函数名的函数。lambda函数的语法定义为:[捕捉列表] (参数) mutable -> 返回值类型 {函数体}二、[捕捉列表],定义能够捕获的函数外的变量,通俗地说捕获就是匿名函数外所在作用域内的变量,这些变量可以在函数体内部调用。捕获有两种形式,按值捕获和按引用捕获。按值捕获的变量相当于和函数外作用域内同名的一个变量,在函数内对改变量...

2019-10-11 11:03:38 2591

原创 C++内联函数

一、如何定义非类成员函数,在函数定义处(不是声明处)增加inline关键字。类成员函数,在类体内部(类定义头文件中)定义的函数默认就是内联函数。二、内联函数的优缺点常规函数调用时,程序需要由主程序根据函数地址跳转到函数执行处,函数执行完后再跳转回主程序,函数来回跳转需要一定的开销。而内联函数在编译过程中将函数代码和主程序代码“内联”起来,对于内联代码,程序在执行时无需跳转,运行速度...

2019-10-11 10:10:36 359

原创 设计模式-模板方法模式Template Method(对象行为型)

一、概述定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。AbstractClass叫做抽象模板,它的方法分为两类:(1)原始方法,是由子类实现的方法,并且在模板方法被调用(2)模板方法,可以有一个或几个,实现对原始方法的调度,完成固定的逻辑class AbstractClass{public: ...

2019-08-30 15:02:13 240

原创 设计模式-状态模式State(对象行为型)

一、概述当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。State为抽象状态角色,负责对象状态定义,并且封装环境角色以实现状态切换ConcreteState为具体状态角色,负责本状态的行为管理以及趋向状态处理,通俗地说,就是本状态下要做的事情,以及本状态如何过渡到其他状态。Context为环境角色,定义客户端需要的接口,并且负责具体状态的切换。//te...

2019-08-30 14:32:37 329

原创 设计模式-策略模式Strategy(对象行为型)

一、概述策略模式就是定义一组算法,将每个算法封装起来,并且使它们之间可以互换。(1)Strategy抽象策略角色每个策略或者算法必须具有的方法和属性(2)ConcreteStrategy具体策略角色实现策略中的操作,该类含有具体的算法(3)Context封装角色,上下文角色启封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化class Strat...

2019-08-24 09:25:15 176

原创 设计模式-备忘录模式Memento(对象行为型)

一、概述在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。二、类图Originator:发起人,负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。Memento:备忘录,负责存储Or...

2019-08-23 15:11:09 128

原创 设计模式-中介者模式Mediator(对象行为型)

一、概述中介者模式用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其松耦合,而且可以独立地改变它们之间的交互。二、类图Colleague是抽象同事类。而ConcreteColleague是具体同事类,每个具体同事类只知道自己的行为,而不了解其他同事的情况,但它们却都认识中介者对象,通过中介者角色来和其他同事角色进行通信协作。Mediator是抽...

2019-08-23 14:19:45 227

原创 设计模式-迭代器模式Interator(对象行为型)

一、概述迭代器模式提供一种方法顺序访问一个集合Aggregate(容器)对象中的各个元素,而又不暴露该对象的内部表示(细节)。迭代器是为容器服务的,而能容纳对象的所有类型都可以称之为容器。二、类图1、Iterator抽象迭代器,定义访问和遍历元素的接口,而且基本上有固定的几个方法:(1)first获取第一个元素(2)next访问下一个元素(3)isDone是否已经访问到...

2019-08-22 20:11:05 130

原创 设计模式-解释器模式Interpreter(对象行为型)

一、概述解释器模式是一种按照规定语法进行解析的方案。给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。二、类图AbstractExpression为抽象解释器TerminalExpression为终结符表达式。实现与文法中的元素相关联的操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。Nontermi...

2019-08-22 19:54:37 178

原创 设计模式-职责链模式Chain Of Responsibility(对象行为型)

一、概述职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二、类图Handler一方面需要定义处理请求的方法,另一方面需要定义责任链的下一个继任者(successor)。ConcreteHandler类是具体处理者类,处理它所负责的请求,可访问它的后继者,如果可以处理该请求,...

2019-08-22 18:19:52 161

原创 设计模式--享元模式Flyweight(对象结构型)

一、概述享元模式(Flyweight),就是利用共享技术有效地支持大量细粒度的对象。当程序创建大量的对象时有损程序的性能,同时还容易造成内存溢出。我们将对象内部的信息进行细粒度地划分,将一部分信息提取出来进行共享,可以节省内存空间,提高程序性能。对象细粒度化后的信息分为两个部分:内部状态(intrinsic)与外部状态(extrinsic)。内部状态是对象可以共享出来的信息,存储在享元对象...

2019-08-22 14:56:38 188

原创 装饰模式和代理模式对比

一、装饰模式用户使用代码://基类class Subject{public: virtual void operation();};//具体类class ConcreteSubject : public Subject{public: virtual void operation();};//装饰类class Decorate : publi...

2019-08-14 19:26:50 334

转载 linux中fd_set的内部实现

一、在网络编程中,经常用到selec系统调用来判断套接字上是否存在数据可读,或者能否向一个套接字写入数据。其原型为:  int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);其中,fd_set是一个socket集合,常用如下宏来对fd_set进行...

2019-08-13 17:12:32 785

原创 原子操作

1、原子操作原子操作(atomic operation)指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。现代操作系统中,一般都提供了原子操作来实现一些同步操作,所谓原子操作,也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作之前,要么在原子操作完成之后。...

2019-08-12 10:13:28 43097 13

原创 条件变量和信号量

1、条件变量条件变量(condition variable)是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待某个条件为真,而将自己挂起;另一个线程使的条件成立,并通知等待的线程继续。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。2、windows条件变量的实现(1)利用同步对象实现条件变量自己封装的一个条件变量: 1 #ifndef _M...

2019-08-08 14:57:30 13784

转载 循环buffer的实现

1.循环buffer的特点1、先进先出2、当空闲缓冲区用完,且又有新的数据需要存储时,覆盖历史数据,保存新的数据3、环形缓冲区在实现时采用的是线型的存储结构4、线型存储中需要四个指针,分别为缓冲区首地址指针(pHead)、尾地址指针(pTail)、有效数据起始指针(pValid)、有效数据尾指针(pValidTail)。其中pValid<pValidTail或者pValid...

2019-08-07 11:23:28 3592

原创 visual studio代码错位

最近在visual studio上编译代码,发现代码出错提示位置和断点位置总是和实际不符。尝试各种方法发现可能是由于代码拷贝或者添加中文注释时,给编译器输入了错误的换行符导致的。visual studio认为0x0D0A才是换行符,而我的代码有的换行处只有0x0D,所以编译器在解析换行时和实际产生了偏移。通过UltraEdit将源文件通过十六进制模式打开,搜索将代码中0x0D改为0x0D0A,问题...

2019-08-07 09:24:37 656

原创 c/c++时间操作函数总结

一、时区相关概念地球自西往东转动,东边比西边先看到太阳,所以东边的时间比西边的时间早。将地球经度按照24个时区进行划分,每个时区相隔的经度为15度。以英国伦敦(格林尼治天文台旧址)为中时区(零时区),向东有11个时区,向西也有11个时区,太平洋白令海峡所在经度为12区,东西各占一半。0时区向东每隔一个时区时间快1小时,向西每隔一个时区时间慢1小时。在12区中间,左边刚好比右边日期大1天。U...

2019-07-27 10:49:28 2193

原创 linux g++编译以及库多重依赖

一、编译可执行文件g++ –c Hello.cpp 编译文件,生成目标文件Hello.og++ Hello.o –o a.out 链接并重命名为可执行文件a.outg++ Hello.cc 编译链接一起,生成a.outg++ Hello.cc –o hello 生成a.out并命名为hello二、编译相关选项(1)-c生成.o文件,对代码文件进行预处理、编译和...

2018-06-07 11:12:00 5555

原创 linux中gcc和g++的区别

1、两者都是编译器2、gcc编译c语言;g++既可以编译c语言,也可以编译c++语言3、gcc不能自动链接库文件,一般用g++来链接库文件,非要用gcc的话,一般使用gcc -lstdc++命令4、extern “c”对于gcc和g++没有区别...

2018-06-07 10:30:00 205

原创 C++多态、虚函数、纯虚函数、抽象类、虚基类

一、C++多态C++的多态包括静态多态和动态多态。静态多态包括函数重载和泛型编程,动态多态包括虚函数。静态多态是指在编译期间就可以确定,动态多态是指在程序运行时才能确定。二、虚函数1、虚函数为类的非静态成员函数,访问权限一般为public。函数声明时,在返回值前加virtual关键字,函数定义时不需要加virtual。父类定义的虚函数,子类在继承时,可以对虚函数重新定义,当然子类的函数...

2018-05-25 09:01:00 198

原创 C++中public/protect/private三种访问权限控制

一、成员访问权限控制1、public(1)public成员变量可以被成员函数访问 [访问性](2)public成员可以被实体对象访问 [访问性](3)public成员可以成为子类成员 [对子类的继承性]2、protect(1)protect成员变量可以被成员函数访问 [访问性](2)protect成员可以成为子类成员 [对子类的继承性]3、private...

2018-05-21 16:30:00 3022

原创 运算符重载与友元函数

一、概述  C++预定义的运算符的操作对象只能是基本数据类型,但是实际上许多用户自定义类型(例如类),也需要类似的运算符操作,C++可以通过运算符重载来满足这种需求。运算符重载本质就是函数重载,也是C++多态的一种形式。运算符重载是通过创建运算符函数实现的,和其他函数类似,唯一的区别是函数名为关键字operator和运算符符号组成。二、运算符重载限制(1)至少有一个操作数是自定义类型,...

2018-04-11 14:48:00 675

原创 类的类型转换和转换函数

一、概述  不同基本数据类型间可以进行类型转换。有的可以自动类型转换,例如将int类型值赋值给long型变量。对于完全不兼容的类型,如果要进行类型转换只能通过强制类型转换。同样的,类类型也可以与其他数据类型进行类型转换。二、自动类型转换  如果类定义了一个构造函数,这个构造函数只有一个参数,则可以将参数对应类型的变量自动转换为类类型。例如:  class String   {...

2018-04-11 14:16:00 1361

原创 C++内存模型

1、存储持续性C++使用四种不同方案来存储数据,它们的区别在于数据在内存中保留的时间,也叫做存储持续性(1)自动存储持续性  在函数定义中声明的变量,包括函数参数。(2)静态存储持续性  在函数定义外和使用关键字static定义的变量。它们在程序整个运行过程中都存在。(3)线程存储持续性  在C++11中,如果使用关键字thread_local声明变量,则变量生命期和所...

2018-04-10 11:31:00 117

原创 C/C++中volatile关键字详解

1.为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler ...

2018-04-10 09:15:00 67

原创 类继承中构造函数和析构函数的调用

类继承中构造函数和析构函数的调用现在,有三个类,类的定义如下class CA{public:CA(){cout<<"CA constructor"<<endl;} ~CA(){cout<<"CA desstructor"<<endl;}};class CB:public CA{public:CB(){cout&l...

2018-04-03 09:40:00 147

原创 ffmpeg中timebase理解

1、采样频率采样为从连续信号转化为离散信号的一个过程,视频采样频率是指每秒采样的次数,用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫做采样间隔。视频采样频率一般为90KHz(90000Hz)。2、ffmpeg的分层结构ffmpeg从下到上对数据处理的分层结构为:原始数据层(Raw data)、编解码层(encode/decode)和封装层(mux/demux)。原始数据...

2018-03-08 15:54:00 1164

原创 ffmpeg总结

1、I、P、B帧(1)I帧:关键帧,可以解码成一张完整的图片(2)P帧:解码时需要参考前面一个I帧或者P帧(3)B帧:解码时需要参考前一个I或者P帧以及后面一个P帧P帧和B帧只存放相对于基准帧的差异数据,数据量要远远小于I帧,通过这种方式编码,可以将视频进行压缩2、PTS和DTS(1)PTS(Presentation Time Stamp):PTS主要用于度量解码...

2018-03-08 13:26:00 118

原创 基于flash在浏览器播放实时视频调研

1、概述flash技术是adobe公司的产品,主要包括flash播放器和rtmp服务器,adobe为了实现flash定义了rtmp协议和专门的音视频封装格式(音频为fla,视频为flv)。adobe关于这些技术和标准的说明如下[1]:(1)Adobe Media Server(2)Adobe's RTMP Protocol(3)Adobe's Flash Pla...

2018-02-28 16:03:00 82

原创 OpenCV使用中的一些总结

一、threshold阈值操作1、阈值可以被视作最简单的图像分割方法。例如,从一副图像中利用阈值分割出我们需要的物体部分,这样的图像分割方法基于图像中的物体与背景之间的灰度差异。2、threshold对单通道数组应用固定阈值操作。原型:double threshold( InputArray src, OutputArray dst,double thresh, double maxv...

2017-08-16 10:23:00 106

原创 OpenCV3编程入门读书笔记5-边缘检测

一、边缘检测的一般步骤1、滤波边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。2、增强增强边缘的基础是确定图像各点领域强度的变化值。增强算法可以将图像灰度点领域强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。3、检测经过增强的图像,往往领域中有很多点的梯度值比较大,而在...

2017-08-07 10:22:00 146

原创 OpenCV3编程入门读书笔记4-形态学滤波

一、腐蚀和膨胀1、腐蚀和膨胀的主要功能(1)消除噪声(2)分割出独立的图像元素,在图像中连接相邻的元素(3)寻找图像中的极大值或者极小值区域(4)求出图像的梯度2、膨胀(dilate)膨胀就是求局部最大值的操作。从数学角度来说,就是将图像与核进行卷积,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。3、腐蚀...

2017-08-05 10:41:00 161

原创 OpenCV3编程入门-读书笔记3-滤波

一、领域滤波(卷积)邻域算子值利用给定像素周围像素的值决定此像素的最终输出。如图左边图像与中间图像卷积得到右边图像。目标图像中绿色的像素由原图像中蓝色标记的像素计算得到。通用线性邻域滤波是一种常用的邻域算子,输入像素加权得到输出像素:其中权重核为“滤波系数”。上面的式子可以简记为:二、线性滤波1、方框滤波(box Filter)最简单的线性滤波是移动平均或...

2017-08-04 17:30:00 93

原创 OpenCV掩模mask的原理和作用

一、什么是掩模maskOpenCV中很多函数都带有一个mask参数,mask被称为掩模。图像掩模一般用来对处理的图像(全部或者局部)进行遮挡,来控制图像处理的区域或处理过程。二、掩模原理掩模一般是小于等于源图像的单通道矩阵,掩模中的值分为两种0和非0。以Mat::copyTo为例,当mask的值不为0,则将源图像拷贝到目标图像,当mask为0,则不进行拷贝,目标图像保持不变。源图像...

2017-08-04 14:37:00 866

RtpProtocol.zip

(1)包含rfc3550协议,主要介绍rtp和rtcp协议的格式。 (2)包含rfc3984协议,主要介绍h.264视频数据在rtp协议中的处理 (3)包含rfc7798协议,主要介绍h.265(HEVC)视频数据在rtp协议中的处理

2020-07-15

T-REC-H.265-201911.pdf

h265/hevc(High efficiency video coding)官方文档2019年11月最新版

2020-02-27

《设计模式》 中文版 完整高清pdf

本书设计实例从面向对象的设计中精选出 23 个设计模式,总结 了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出 来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些 模式在实用环境下有特别有用。

2012-10-12

设计模式(简单工厂和工厂方法C++版)Demo程序

简单工厂模式和工厂方法模式的Demo程序,在VC10下写的,对比两者的Demo程序,你可以慢慢领会两种模式的优缺点。

2012-10-12

C++重点总结

自己有2年C++开发经验,这是自己对C++的一点总结,希望对大家有用

2012-05-05

linux_makefile教程

linux_makefile教程主要介绍linux操作系统中makefile的格式和编写

2012-05-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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