![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 88
freeboy1015
这个作者很懒,什么都没留下…
展开
-
联 合(union) 结构
联 合(union) 1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类原创 2011-10-12 09:28:32 · 2127 阅读 · 0 评论 -
C++虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R原创 2011-10-05 13:39:09 · 612 阅读 · 0 评论 -
友元函数和友元类
采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,原创 2011-10-05 14:02:38 · 603 阅读 · 0 评论 -
C++函数重载深度剖析
——每个现象后面都隐藏一个本质,关键在于我们是否去挖掘写在前面:函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1、声明/定义重载函数时,是如何解决命名转载 2011-10-05 14:29:09 · 847 阅读 · 0 评论 -
前置(后置)++ /--与+/-在不同编译器下运算方式不同
——Don't believe in magic !Understand what your program do ,how they do .引言昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象:vie转载 2011-10-05 14:45:40 · 1278 阅读 · 0 评论 -
内联函数
(1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。(2)为什么要引入内联函数?当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子:#define ABS(x) ((x原创 2011-10-05 15:35:08 · 622 阅读 · 0 评论 -
虚基类 虚函数 纯虚函数讲解
虚基类在说明其作用前先看一段代码class A{public: int iValue;};class B:public A{public: void bPrintf(){cout<<"This is class B"<<原创 2011-10-05 13:57:36 · 833 阅读 · 0 评论 -
深入理解指针函数和函数指针
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。原创 2011-10-21 10:00:28 · 767 阅读 · 0 评论 -
C# vs C++之三:静态构造函数
在C#中,类的静态构造函数用于在使用类之前进行相关的初始化工作;比如,初始化静态成员或执行特定操作。CLR 在第一次创建该类对象或调用该类静态方法时自动调用静态构造函数。同时,CLR保证静态构造函数的线程安全性(准确地说是,只会调用一次,不存在多线程问题)。下面是MSDN对静态构造函数特点的描述:1.静态构造函数既没有访问修饰符,也没有参数2.在创建第一个实例或引用任何静态成员原创 2011-11-18 14:58:12 · 696 阅读 · 0 评论 -
举例说明如何在C#中使用C/C++写的DLL
举例说明如何在C#中使用C/C++写的DLL如何在C#中使用C/C++写的DLL。举一个我做过的例子说明:建立VC工程DllDemo,建立的时候选择MFC AppWizard(dll),选择Regular Dll using shared MFC Dll或者MFC Extension Dll。现在可以写一个函数代码,在DllDemo.cpp文件中添加这些代码。也可以使用新的原创 2011-12-29 21:57:52 · 579 阅读 · 0 评论 -
c++DLL 学习之路
DLL的优点简单的说,dll有以下几个优点:1) 节省内存。同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中。如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。2) 不需编译的软件系统升转载 2011-12-29 22:01:37 · 692 阅读 · 0 评论 -
VS2008下编写调试dll的一个实例(参考msdn)
演练:创建和使用动态链接库 在本演练中,您将创建一个动态链接库 (DLL),其中包含可供其他应用程序使用的有用例程。使用 DLL 是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现这些例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。本演练使用本机 C++。有关使用本机 C++ 创建静态库的演练,请参见 演练:创建和使用静态库。有转载 2011-12-31 11:19:50 · 146 阅读 · 0 评论 -
OpenCV随机方法使用
OpenCV也提供了另一个数据结构来做Rand的实作,CvRandState,被包在"cvcompat.h"里,"cvcompat.h"的完整意 思是Computer Vision Compatility,CvRandState的特色是可以选定常态分布及均匀分布,不过,它只能运用在矩阵跟一维数组.矩阵的部份程序代码如下RandState矩阵的实作#include #incl转载 2012-02-10 14:21:24 · 833 阅读 · 0 评论 -
OpenCv矩阵操作函数大全
OpenCv矩阵操作有很多函数有mask,代表掩码,如果某位mask是0,那么对应的src的那一位就不计算,mask要和矩阵/ROI/的大小相等大多数函数支持ROI,如果图像ROI被设置,那么只处理ROI部分少部分函数支持COI,如果COI设置,只处理感兴趣的通道矩阵逻辑运算void cvAnd(const CvArr* src1,const CvArr* sr转载 2012-02-13 20:43:17 · 6127 阅读 · 0 评论 -
opencv中关于直方图的相关函数
直方图 CvHistogram 多维直方图 typedef struct CvHistogram { int header_size; CvHistType type; int flags; int c_dims; int dims[CV_HIST原创 2012-02-13 19:49:17 · 4674 阅读 · 0 评论 -
图像变换 - 图像拉伸、收缩、扭曲、旋转 - 透视变换(cvWarpPerspective)
透视变换(单应性?)能提供更大的灵活性,但是一个透视投影并不是线性变换,因此所采用的映射矩阵是3*3,且控点变为4个,其他方面与仿射变换完全类似,下面的例程是针对密集变换,稀疏图像变换则采用cvPerspectiveTransform函数来处理。-------------------------------------------------------------------------转载 2012-02-13 19:55:53 · 11376 阅读 · 1 评论 -
OpenCV 矩阵操作
GEMM通用矩阵乘法void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, double beta, CvArr* dst, int tABC=0 );#define cvMatMulAdd( src1, src2, src3, dst ) c原创 2012-02-13 19:57:22 · 4182 阅读 · 0 评论 -
用opencv画两幅图片的直方图
//计算直方图,并用图片显示出来直方图结果图像; //原创crazyMu void DrawHis(IplImage *image1,IplImage *image2){ int size=256; float range[]={0,255}; float* ranges[]={range}; double binnum[256]={0};原创 2012-02-13 20:46:05 · 2517 阅读 · 0 评论 -
C++中的vector排序问题
最近做的东西,要将vector 中的内容输出,结果发现有些文件被交替反复打开,所以就想吧vector 中的元素排序,学习中发现下面这篇文章总结的挺好的,分享一下也~C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方原创 2012-02-14 16:54:02 · 1664 阅读 · 0 评论 -
define与const、inline、typedef的区别
#define与const、inline、typedef的区别 我们在使用C++是肯定多次经意或不经意的使用过#define,在C++的头文件一般都是这样定义的:#if ! defined _SAMPLE_H_#define _SAMPLE_H_#endif //defined _SAMPLE_H_#define公用有很多,其在C++中也有不可代替的位置,然而在C++原创 2012-02-27 21:30:15 · 817 阅读 · 0 评论 -
有符号数与无符号数之间运算问题
有符号数与无符号数之间运算问题以下实验均在virual c++6中运行通过这个问题测试是否懂得C语言中的整数自动转换原则,有些开发者懂得极少这些东西。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。 首先进行一个实验,分别定义一个sign原创 2012-02-27 20:11:48 · 591 阅读 · 0 评论 -
堆和栈的区别(一)
一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态原创 2012-02-22 17:58:31 · 658 阅读 · 0 评论 -
堆和栈的区别(二)
堆(Heap)栈(Stack)1、内存分配方面: 堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。 栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。原创 2012-02-27 21:12:58 · 593 阅读 · 0 评论 -
c++代码优化总结
c++代码优化总结一. 优化之前 在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottleneck)在哪里。然而当你做这件事情的时候切忌从一个debug-version进行推断,因为debug-version中包含了许多额外的代码。一个debug-version可执行体要比release-version大出40%。那些额外的代码都是用来支持调试的,比如说符号的查找。大多数实现转载 2012-02-29 16:37:54 · 789 阅读 · 0 评论 -
88行代码实现俄罗斯方块游戏(含讲解)
在正式阅读本文之前,请你记得你应该用娱乐的心态来看,本代码所使用到的技巧,在工作了的人眼里会觉得很纠结,很蛋疼,很不可理喻,很丑, 注意,是你蛋疼,不关我的事 通常,写一个俄罗斯方块,往往动不动就几百行,甚至上千行,而这里只有88行 正所谓头脑风暴,打破常规。这里将使用很多不平常的手段来减少代码但为了能更通用,一份控制台版本的代码,同样是88行,直接复制到VC即转载 2012-03-04 22:04:46 · 1603 阅读 · 0 评论 -
何为仿射变换(Affine Transformation)
仿射变换(Affine Transformation)Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注:straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。)。仿射变换可以通过一系列的原原创 2012-03-05 18:44:52 · 12664 阅读 · 1 评论 -
CUDA编程——纹理内存
【IT168 文档】 (一)纹理属性 (二)纹理拾取函数 (三)拾取纹理内存与读取全局或常量内存相比的优点 (一)纹理属性 纹理可以在线性内存或是CUDA数组(纹理内存)的任何区域。所以纹理拾取也就对存在与线性内存或CUDA数组中的纹理读取数据。 共用运行组件(既可以运行在host又可以运行在设备)中给出了纹理类型texture原创 2012-03-05 21:32:46 · 2266 阅读 · 0 评论 -
CUDA纹理存储器的特性及其使用
转载自:http://blog.csdn.net/darkstorm2111203/article/details/42940122.3.5 纹理存储器纹理存储器(texture memory)是一种只读存储器,由GPU用于纹理渲染的的图形专用单元发展而来,因此也提供了一些特殊功能。纹理存储器中的数据位于显存,但可以通过纹理缓存加速读取。在纹理存储器中可以绑定的数据比在常量存储器可转载 2012-03-05 20:58:30 · 2087 阅读 · 0 评论 -
C语言中如何使用宏(#、##、...)
C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。1.关 于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏 变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP) \原创 2012-03-28 15:54:17 · 714 阅读 · 0 评论 -
error LNK2005 已经在***.obj中定义
为什么会出现这个错误??“error LNK2005: 已经在aaa.obj中定义” 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。 造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量。可能存在两种情况: A、对于一些初学编程的程序员,有时转载 2012-03-28 19:01:40 · 5518 阅读 · 1 评论 -
CUDA——SDK4.1+VS2008+VA_X
在此记录一下平台搭建的过程。 首先需要安装VS 2008。 然后从英伟达官网上下载开发包、驱动和工具包。 保证驱动和开发包、工具包均为同一版本。 我下载的是4.1的最新版本。即cudatoolkit_4.1.28_win_32.msi 、devdriver_4.1_winxp_32_286.19_general.exe 、gpucompu原创 2012-03-31 15:07:16 · 1638 阅读 · 0 评论 -
Visual Studio 2010 中CUDA 4.0的安装与配置
Visual Studio 2010 中CUDA 4.0的安装与配置安装环境:Win7 64位系统,Geforce GT 430显卡安装前提: Visual Studio 2010 Visual Assist X安装步骤:1,Nvidia显卡驱动,装275.33版,这是最新版本驱动,初次安装为了少出错,最好安装比较新版本的驱动。2,C转载 2012-03-31 20:29:55 · 1233 阅读 · 0 评论 -
win7(64位) + vs2010 + opencv2.3.1 配置
目的:编译64位程序折腾将近三天的,首先写一下失败的经历:(1)windowsXP,vs2008,X64编译opencv2.1没能通过,cmake过了,vs2008基于X64平台编译没能通过。(2)windowsXP,vs2008,X64编译opencv2.3.1,cmake就没能通过。(3)windowsXP,vs2008,直接使用官方opencv2.3.1中的X64+2008配转载 2012-04-01 17:58:15 · 3228 阅读 · 0 评论 -
#include“stdafx.h”详解
1,用VS2008新建项目,选择【Win32】-【Win32控制台应用程序】-输入名称:Test-【确定】 再选【下一步】-默认情况下,我们都是在【空项目】前打上对勾,建立一个纯的C或C++程序。我们这里选择默认,即【预编译头】前打上对勾,之后【完成】2,在Test项目中,头文件有stdafx.h和targetver.h,源文件有stdafx.cpp和Test.cpp,还转载 2012-03-16 10:41:12 · 1528 阅读 · 0 评论 -
STL简介
一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:algo原创 2012-03-16 16:44:25 · 500 阅读 · 0 评论 -
OpenMP中的任务调度----schedule()
OpenMP中的任务调度 OpenMP中,任务调度主要用于并行的for循环中,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代的话,会造成各个线程计算负载不均衡,这会使得有些线程先执行完,有些后执行完,造成某些CPU核空闲,影响程序性能。例如以下代码:int i, j;int a[100][100] = {0};for ( i =0; i原创 2012-03-19 16:05:25 · 5742 阅读 · 1 评论 -
openMP 并行编程基础
openMP 并行编程基础1、fork/join并行执行模式的概念OpenMP是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计使用的。前面一篇文章中已经试用了OpenMP的一个Parallel for指令。从上篇文章中我们也可以发现OpenMP并行执行的程序要全部结束后才能执行后面的非并行部分的代码。这就是标准的并行模式fork/join式并原创 2012-03-21 10:25:33 · 1229 阅读 · 0 评论 -
堆的操作和实现
数据结构——堆的操作和实现当应用优先级队列或者进行堆排序时,一般利用堆来实现。堆是一个完全(除最底层外都是满的)二叉树,并满足如下条件:1、根结点若有子树,则子树一定也是堆。2、根结点一定大于(或小于)子结点。因为要求堆必须是完全二叉树,所以可以用线性的数据结构,比如数组,来实现堆。利用数组实现,则对于长为N的堆中的元素从0到N-1排列,原创 2012-04-08 20:51:55 · 896 阅读 · 0 评论 -
连连看算法及源代码
闲着无聊,编个连连看玩玩,用了魔兽里面的头像来做图片。下面记录如下: 程序的关键在于判断用户连续点击的两个图案能否消除。两个图片可以消除的条件有两个:图片相同图片间连线的转角数不得超过2 。 而判断能否通过小于两个转角的路径连通的算法有两种:分类判断法以转角数为标准的广度优先搜索 下面对两种算法分别转载 2012-03-23 11:28:38 · 997 阅读 · 0 评论 -
C++和C#中的回调函数
什么是回调?有人这么说:“发布者说,当我遇到什么事的时候,我就通知大家,有需要通知的就把电话号码给我,等那件事发生时,我就打电话通知大家;”。 而在这篇文章中则详细介绍了什么是回调函数以及回调函数的机制:http://shudingbo.spaces.live.com/blog/cns!C33400475B08F157!423.entry 1. 什么是回调函数 回调函原创 2012-04-12 21:15:16 · 3213 阅读 · 0 评论