C++
hjh2005
这个作者很懒,什么都没留下…
展开
-
c++程序里如何调用MATLAB中的函数
我们的c++程序有很多种方法调用Matlab中的函数,但是我最喜欢的方法是直接调用Matlab的动态库,这样生成的程序在没有安装Matlab的机子上也可以运行。具体的方法如下:上面提到的Matlab“动态库”是指Matlab6.5的动态库,6.5以上不支持这样直接调用程序了,所以没有提供类似的动态库。安装MATLAB6.5后,在安装路径下的extern文件夹下就是我们要的所有东西了。原创 2011-11-22 19:28:44 · 10984 阅读 · 0 评论 -
在指定的内存块中创建对象
代码举例如下:#include char *buf= new char [1024*1024];double *array=new(buf) double[10];如果创建的是类对象则要显示地调用类的析构函数。参考:http://hubeihuyanwei.blog.163.com/blog/static/28205284201171722359640原创 2012-08-02 10:53:00 · 759 阅读 · 0 评论 -
只遍历一次图像如何求图像个波段之间的协方差矩阵
根据图像的协方差矩阵的求解公式,采用传统的方法至少要遍历2次图像才能求得图像的协方差矩阵:第一次是求均值,第二次是求每个样本与均值样本之差的积。如果图像比较大,存储在磁盘上,频繁的读取磁盘数据是很费时的一项工作。有没有只遍历一次图像就能求得图像的协方差矩阵的方法呢?经过研究还真发现了这样的一种方法,废话少说直接上代码: GDALAllRegister();原创 2013-01-02 20:15:35 · 3855 阅读 · 1 评论 -
图表中有规律的刻度是如何实现的?
大家在用Matlab或word的时候发现它们的图表的X轴和Y轴上的刻度都是非常有规律的,比如都是0、1、2、3、4、5……或者是5、10、15、20……或者是0.2、0.4、0.6、0.8…… 或者是100、200、300、400……它们是怎么根据我们的数据范围得到这些有规律的值的呢?由于我们项目中也要用到类似的功能所以请教了项目组的数学高手,发现采用下的方法可以实现这个功能,废话原创 2013-01-02 20:25:21 · 1761 阅读 · 0 评论 -
利用GDAL读取图片,将数据以BIP的方式存在内存中。
用GDAL的读取函数:GDALDataset::RasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, void * pData,原创 2013-01-10 16:34:48 · 2667 阅读 · 0 评论 -
C++ 包装枚举类型
C++的枚举类型与C中的枚举类型基本是一样的,它可与int类型隐式转换。但是并不等价于int类型,关于这部分的详细介绍请参考:《C++ 枚举类型的思考》要对枚举类型进行检查必须在编译阶段想办法实现,一旦进入运行阶段枚举值就会被用整数来代替,但不一定是int类型,有可能是char、short等。今天我想说的是,在C++中怎样来包装枚举类型让我们使用起来像用强类型一样安全。起始以下原创 2013-03-06 16:01:37 · 1534 阅读 · 0 评论 -
VS2008中C++与CUDA混合编程的方法
要进一步进行以下步骤的前提是机子上已经正确安装了CUDA库,并能创建CUDA项目和编译。CUDA库的安装和环境配置请参考其它文章。步骤如下:1、首先创建Win32控制台程序;2、右键单击项目文件选择“自定义生成规则”,弹出自定义生成规则设置对话框;3、选中名称为“CUDA Runtime API Build Rule ”的选项并确定;4、添加 .cu格式的CUDA源文件,右键点原创 2013-03-13 11:19:48 · 3905 阅读 · 0 评论 -
如何找到大于某个数而且是2的幂的最小整数?
在GPU或其他并行编程中的规约算法,经常要用到大于某个数而且是2的幂的最小整数,来实现折叠计算。但是怎么来找到这个数呢?下面给出三种方法,本人觉得第三种算法最好!方法一:unsigned int GetNoSmall2PowNum1(unsigned int num){ if (num<=1) return num; double pn=log2(num); if ((pn-(in原创 2013-03-26 17:02:03 · 2543 阅读 · 0 评论 -
C/C++中的输出字符串分割和对齐
一直都在用C/C++,但用的都是库,像什么opencv啊,gdal啊,cuda啊等等。我们做的事情很多都只是调用它们的API,反而C/C++自身的库用得少了,很多基本的都忘记了。就像我们走得太快灵魂跟不上一样。有时候我们得停下脚步等等自己的灵魂。下面是今天项目中用到的一些基本函数:首先是写了一个分隔字符串的函数,给定一个字符串和一个字符,将字符串分隔成多个段,这个功能在C#和python等原创 2013-04-17 21:16:23 · 7205 阅读 · 0 评论 -
随机颜色的生成
有些时候我们需要为一些对象附上随机的颜色,比如我们有这么一个需求,在一个chart里添加显示曲线,刚开始曲线的颜色默认都是黑色的很不好看,后来为了显示的美观我们想给添加的曲线随机的附上颜色,但是有一个要求,曲线的颜色不能太淡,比如不能是白色。因为我们的chart的背景颜色是白色的,如果曲线也是白色那曲线就会看不到了。 我们首先想到的方法是如下:Color c(rand()%2原创 2013-04-18 21:15:49 · 20596 阅读 · 1 评论 -
关闭控制台程序的控制台窗口
转自:http://blog.csdn.net/sandro_zhang/article/details/7026656有三种方法:1,在程序开始时调用FreeConsole();(windows.h)2,在VC开发环境的控制台还是会有的,因为那是VC调的,不过你的程序不会输出到那个控制台罢了 在工程属性里面分别设置 linker->system转载 2013-06-08 16:44:15 · 4069 阅读 · 0 评论 -
VS2012编译LibZip库
LibZip库是解压缩zip文件的C库。中文的网站目前还没有找到相关的编译方法,找了一篇英文文档加上自己的实验修改了一下:编译步骤如下:首先先下载CMake,我下载的是2.8版本。libzip要引用 zlib 库所以要先下载,我下载的是 zlib-1.2.8,把它解压在如 C:\LibZip文件夹中.如果是在windows 64位的环境下,请在原创 2013-07-15 23:21:43 · 7274 阅读 · 1 评论 -
最小包围多边形(凸包;最小包围点集)——C代码例子
本文来自:http://alienryderflex.com/smallest_enclosing_polygon/这个C代码例子需要一群2维点集,如下图所示:要获得包含这些点的最小多边形如下图所示:查找点集最小多边形的一种方法是——将所有点都传到函数中计算。这段代码没有充分的测试过,所以如果你有任何问题,请告诉我。这个函数可以应对重叠点的问题,如果角点上有翻译 2013-07-05 09:05:37 · 11151 阅读 · 0 评论 -
C#调用的C++动态库里到底能分配多大的内存(实验)
由于算法需要较大的内存,所以将算法用C++来写成DLL的形式,C#调用它运行,今天做了一下实验,实验结果如下:说明:我的电脑是32位XP系统,内存3G动态库和C#程序都是debug模式下:在动态库里最多能够分配695M的内存; // C++ code : char *bigArray=new char[1024*1024*695];动态库和C#程序都是r原创 2012-07-26 22:06:37 · 2426 阅读 · 0 评论 -
在GDAL中以BSQ的方式保存GTiff文件
GDAL保存GTiff文件时默认是以BIP的方式保存的,以BSQ方式保存的例程如下:int main(int argc, char* argv[]){ char* InputFileName="c:\\Cup95eff.tif"; char* OutputFileName="c:\\TestOut.tif"; GDALAllRegister(); //原创 2012-08-08 13:15:57 · 3966 阅读 · 4 评论 -
求矩阵行列式的方法
网上找的,没用递归:n为矩阵的行数(也就是列数)double sdet(double *a,int n){ int i,j,k,is,js,l,u,v; double f,det,q,d; f=1.0; det=1.0; for (k=0; k { q=0.0; for (i=k; i原创 2012-07-06 17:28:14 · 2050 阅读 · 0 评论 -
手动创建VC2005解决方案
转自http://blog.csdn.net/starlee/article/details/1769755 原题(一步一步创建VC2005解决方案)现在软件开发已经告别了“独行侠”的年代,而是以团队开发为主。一般情况下,一个解决方案都会包含多个项目,比如:其中一些是静态库项目,一些是动态库项目,当然还会有应用程序项目。另外,根据需要,还可能会使用一些第三方库。因此为解决方案设置转载 2011-12-14 20:51:13 · 798 阅读 · 0 评论 -
加载dll动态库出错的解决方法
说明一下我的程序的情况,首先基于.Net2.0用C#写了一个界面程序,界面上有一个按钮,一按就会开始执行算法,由于算法要求效率较高,所以采用的C/C++写的。其实也就是C#调用C/C++的动态库的问题,但是由于算法比较复杂,算法动态库又调用了其它开源动态库的里的一些函数。界面程序是用VS2005写的,我的算法动态库也是用VS2005写的,但是它调用了GDAL18库。编译成功后运行程序一原创 2012-02-06 20:25:59 · 11870 阅读 · 0 评论 -
如何在动态库中使用对话框资源(转)
在CSDN论坛上最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32DLL和MFC DLL两个方面来分析并解决这个问题。1.Win32 DLL 在Win32DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogBox或者CreateDialo原创 2012-02-19 16:03:32 · 4775 阅读 · 0 评论 -
并行编译加快VS C++项目的编译速度
最近编译的项目都比较大,话说自己的电脑配置还行,但编译所花的时间还是很长,遇到需要重新编译整个项目的时候真的有回宿舍睡一觉的冲动。昨天一不小心被我发现了一款软件Xoreax IncrediBuild 今天用了一下,实在是太爽了,我把我们办公室的机器都连了起来,其中还有一台工作站,总共加起来22个CUP核,我试了一下实在是太拉风了。 其实这款软件已经推出很久了,只是之前接触的项目都比较原创 2012-03-20 20:40:30 · 4827 阅读 · 0 评论 -
“应用程序配置不正确,程序无法启动” 解决办法(vc2008 sp1)
首先感谢这位几仁兄的几篇博客: http://hi.baidu.com/fairysky/blog/item/130dda13db7b050a5aaf53be.html http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html http://www.cppblog.com/lf426/archive/转载 2012-05-04 17:16:34 · 2320 阅读 · 0 评论 -
VS与IVF C/C++与Fortran混合编程的终极解决方案
IVF与VS结合的Fortran IDE,由于VS中的项目只能使用同一种语言来编程,所以如果要实现C/C++调用Fortran的功能,目前只有将Fortran代码编译成动态库或静态库的方式来实现:在介绍代码之前我觉得应该先介绍一下我们在实现C/C++调用Fortran功能时经常会遇到的一些问题和解决方法,因为很多人已经知道了怎样编写调用代码,但是遇到了一些问题,这样就可以直接看下面的解原创 2012-04-22 22:32:30 · 13977 阅读 · 0 评论 -
静or动态库中的全局变量被不同的dll调用修改,其值是否独立?
今天做了一个C++程序实验,以确认一下静态库和动态库中的全局变量被不同的dll调用时,其值是各自独立的还是共享的?结果显示: 一个静态库中的全局变量被同一个进程的不同的dll调用时,每一个dll对这些全局变量都各自有一份独立的存储空间,即使这些dll处于同一个线程。因为是静态库,在编译每一个独立的dll时,就已经为每个dll分配了静态库中全局变量的存储空间,所以在一个dll中修改被转载 2012-05-08 17:25:03 · 1714 阅读 · 0 评论 -
32位程序移植到64位机器的注意事项
1、64位机器下的指针占8个字节,而在32位机器下是4个字节;2、64位的结构体是8字节对齐的,而在32位机器下是4字节对齐的;(欢迎大家帮忙补充)原创 2012-05-12 23:11:44 · 1471 阅读 · 1 评论 -
C#与Fortran混合编程
C#与Fortran混合编程.NET是Microsoft 推出的完全面向对象开发的平台,用户可以在这个平台上快速建立企业级Web应用程序和高性能桌面应用程序。C#语言是由C++的发展和演化出来的,它是专门为.Net平台开发设计的一个先进的、安全的、面向对象的编程语言。其设计目的之一就是支持快速应用程序开发(Rapid Application Development),与Visual Bas转载 2012-05-16 17:35:15 · 4420 阅读 · 1 评论 -
C# 调用 Fortran 写的算法库的问题
今天将自己用Fortran写的算法库挂在C#中,运行时老是出现栈被破坏的错误但是C++调用算法库的时候是没问题的啊!后来找啊找终于发现是C#线程的堆栈不够导致的!C#给线程的栈默认是1M大小,在线程的构造函数中可设置其大小:Thread 构造函数 (ThreadStart, Int32)参数start 类型:System.Threading.ThreadStart原创 2012-05-16 22:31:06 · 1904 阅读 · 1 评论 -
C++中什么情况下要用explicit关键字修饰构造函数?
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。//explicit 一般用来修饰类的构造函数,如果在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题.//例如:String类class String {p原创 2012-07-04 15:34:35 · 1659 阅读 · 0 评论 -
标准C++类型转换符
C 风格(C-style)强制转型如下: (T) expression // cast expression to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(expression) // cast expression to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这转载 2012-07-05 16:48:08 · 578 阅读 · 0 评论 -
点在多边形内算法——判断一个点是否在一个复杂多边形的内部
新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多边形内最短路径页(shortest-path-through-polygonpage)!图 1图1显示了一个具有14条边的凹多边形。我们要判断红色点是否在多边形内。解决方案是将测试点的Y坐标与多边形的每一个点进行比较,我们会得到一个测试点所在的行与多边形边的交点的列表。在这个例子中有8条边与测试点所在的行翻译 2013-07-04 21:55:11 · 110832 阅读 · 16 评论