
C/C++
aban-mtd
真诚、负责、踏实
展开
-
Linux & Windows 计时函数
直接上代码:#if defined(_WIN32) && defined(_MSC_VER)#include double abtic() { __int64 freq; __int64 clock; QueryPerformanceFrequency( (LARGE_INTEGER *)&freq ); QueryPerformanceCounter( (LARGE_INTEGE原创 2014-05-02 21:47:15 · 1875 阅读 · 0 评论 -
Matlab中数据的存储方式
简介MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利。然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待。未解决这个问题,MATLAB提供了与C语言联用的功能,而C语言的执行效率相对较高,因此联合使用MATLAB和C可以兼顾开发测试程序的速度和程序的执行效率。要联合使用它们,有必要知道MATLAB中数据的存储方式,这就是本文原创 2016-03-30 11:28:19 · 6614 阅读 · 0 评论 -
[多线程] 生产者消费者模型的BOOST实现
说明如果 使用过程中有BUG 一定要告诉我:在下面留言或者给我邮件(sawpara at 126 dot com)使用boost::thread库来实现生产者消费者模型中的缓冲区!仓库内最多可以存放 capacity 个产品。条件变量 condition_put 标记是否可以往仓库中存放一个产品。条件变量 condition_get 标记是否可以从仓库中取出一个产品。互斥量 mutexer原创 2016-02-17 16:23:05 · 3236 阅读 · 1 评论 -
高端技巧:如何使用#define定义变量
Introduction想在源文件中定义一个跟行号有关的变量,每次都手动输入实在是太慢了,本文介绍如何使用宏定义来定义与行号有关的变量。例如:我们想在源代码的第10行定义A_10这样的一个整形变量。用宏定义来完成使命在宏定义中,标准C/C++中给出了两个特殊的操作符:#和##。#是用于给红参数添加双引号;##用于链接两个宏参数,既然可以连接两个宏参数,那我们就可以链接一个首字母和行号作为一个整体了!原创 2015-12-09 13:51:53 · 15957 阅读 · 7 评论 -
[boost] build boost with intel compiler 16.0.XXX
IntroductionThere are few information about how to compile boost with Intel compiler. This article is to describe a simple command steps to let you get a boost library with Intel compiler support.Step原创 2015-12-05 03:29:32 · 2276 阅读 · 0 评论 -
[code segments] OpenCV3.0 SVM with C++ interface
talk is cheap, show you the code:/************************************************************************//* Name : OpenCV SVM test *//* Date : 2015/1原创 2015-12-29 21:41:40 · 2141 阅读 · 0 评论 -
ICL Auto Vectorization
简介此文简单介绍如何使用intel c++编译器实现向量化加速。全文如下安排:base : 待优化的源代码。vectorization : 第一个向量化版本。aligned : 内存对其对向量化的影响。basebase版本代码:// filename : main.cpp#include <iostream>#include <iomanip>#include <stdlib.h>#原创 2015-11-22 12:31:04 · 1881 阅读 · 0 评论 -
bmp格式图像的读写函数(对一个开源代码的封装)
在网上看到一段读写bmp格式图像的代码,本文对这段代码分成两个函数封装起来方便使用,一个函数是读取bmp格式的图像,一个是向指定文件写入bmp格式的图像。原创 2014-10-28 22:20:36 · 3377 阅读 · 0 评论 -
读取文本数据2.1
IntroductionIn order to handle more complicated situation when we read data from a text file, I decided to write a new version, namely 2.0, of “reading data from text file”. The codePut the code firstl原创 2015-03-26 13:49:38 · 1239 阅读 · 1 评论 -
LAB颜色空间各通道的取值范围
简介LAB颜色空间在计算机视觉中经常被使用,知道L,A,B三个通道的取值范围有一定的意义。L∈[0, 100]A∈[−86.1813, 98.2352]B∈[−107.8618, 94.4758]L \in [0,\ 100] \\A \in [-86.1813,\ 98.2352]\\B \in [-107.8618,\ 94.4758] OpenCV获取LAB取值范围下面是一段实验代码,原创 2015-08-28 16:16:05 · 11130 阅读 · 0 评论 -
[OpenCV]在显示窗口中截图
介绍使用OpenCV实现简单的截图功能。首先阐述实现此功能的基本步骤,然后给出实现代码,最后贴出实验结果和一点点评。原创 2015-03-08 13:29:36 · 9768 阅读 · 3 评论 -
SSE入门
我们将在本文中介绍如何在C++/C中使用SSE指令。我的目的不是用SSE写尽可能快的程序,而是试图讲明白它的使用方法。翻译 2014-12-31 23:43:12 · 20180 阅读 · 0 评论 -
Visual Studio 写自己的动态链接库(DLL)
有些时候,我们想写自己的函数库以避免重复写代码,此文介绍如何使用Visual Studio编写自己的动态链接库。原创 2015-01-17 19:51:50 · 17746 阅读 · 10 评论 -
为什么我的线程数越多计算时间反而慢了呢
首先我们应该知道,操作系统是如何使用线程的。每个进程中可以启动若干个线程,这些线程跟操作系统请求计算资源,操作系统也许没我们想的那么智能,它不一定按照我们想要的方式去讲线程与计算核心对应起来。比如,有时候,我们的线程内部的计算需要在磁盘读取数据,这样就会使得当前线程等待,操作系统就可能智能的把它挂起了,它的计算资源又被其它线程使用了,等到数据准备完毕之后,操作系统又将挂起的线程以及他的资源(寄存器原创 2015-01-16 10:35:05 · 17589 阅读 · 0 评论 -
OpenCV:Mat元素访问方法、性能、代码复杂度以及安全性分析
本文讲述了OpenCV中几种访问矩阵元素的方法,在指定平台上给出性能比较,分析每种矩阵元素访问方法的代码复杂度,易用性。原创 2014-06-14 11:45:17 · 44279 阅读 · 4 评论 -
OpenCV+VS2013 属性表配置
简介计算机视觉任务越来越多的依赖著名的开源计算机视觉库OpenCV。OpenCV 2.0 包含了一系列精心设计数据结构和经过优化的视觉算法,大家可以短时间内开发一个不错的视觉应用。OpenCV支持多种不同的硬件和软件平台,这也是它被广泛应用的一个重要原因。使用C/C++开发OpenCV程序,需要告知编译器、连接器相应的头文件目录、库文件以库文件的目录,在开发不同的项目的时候,每次都分别指定这三项内容原创 2016-03-22 20:22:56 · 5129 阅读 · 2 评论 -
OpenCV 2.x/3.x 随机初始化矩阵
简介在测试算法的时候,或者某些算法需要使用随机数,本文介绍如何使用OpenCV的随机数相关功能。主要内容: 1. cv::RNG类 —— random number generator 2. cv::randu —— 填充均匀分布随机数 3. cv::randn —— 填充高斯分布随机数cv::RNGRNG是OpenCV用来产生随机数的类,他可以产生标量随机数,也可以使用随机数填充Mat对象。原创 2016-03-31 13:17:27 · 6406 阅读 · 0 评论 -
CUDA template kernel 与其他编译器合作编译
简介在优化Kernel的时候,希望某些变量是常量,例如循环的次数相关的变量。如果次数限制是常量的话,编译器就可以将循环展开。展开的循环,会省掉一些判断,从而节省一些计算时间。C++的模版中可以使用常量。但是我又不想所有的源代码都由nvcc来编译(其实C++的代码还是调用的host compiler),故此,我写这篇博客来提供一种方法。原创 2016-12-11 20:58:28 · 1373 阅读 · 3 评论 -
C++ 模板类=设计 or template class operator=
设计一个模板类,某个成员变量是在调用的时候才能知道其具体类型。设计重载运算符=。需要特别重视的是: Vec<int> 与Vec<float> 是不同的类型,不同类型之间的赋值,会默认调用类型转换函数。模板类// undefied behavior for 0 > _len template<class _T>class Vec{public: Vec() : _len(0), _da原创 2016-06-26 14:43:36 · 2689 阅读 · 0 评论 -
C/C++ 函数指针
函数声明例如:float func(int, int); 以上就是一个函数的声明,要注意他的实际功能并没有被实现,换句话说就是他并没有被定义,只是声明次函数的存在。float func(int,int); 说明func(int,int)是一个float,func是函数地址(特别注意,他不是指针,而是函数在内存中的地址),它可以接受两个int型的数据作为传入参数。如果你要使用声明的函数,你就必须对这个原创 2016-04-21 12:27:04 · 2129 阅读 · 0 评论 -
C++ 在.h文件中声明,在.cpp文件中定义 模板函数和模板类
C++ 需要模板函数的定义和声明要放在一起,这样才能根据调用需要选择编译具体的实例。如果我们需要多种实例,每个实例要编译一次,就需要编译多次。在模板函数实现妥当以后,当我们在其它文件中使用某些模板函数的时候,基本所有实例都会被重新编译。如果每次编译时间过长,势必会停滞我们的思维,拖长开发进度。所以在模板函数实现妥当以后,我们希望他只编译一次,在非当前模块被修改时,他也不会被重新编译。这篇博客就是介绍原创 2016-05-05 12:39:46 · 15107 阅读 · 0 评论 -
C++调用Matlab画图 V2.0
实现功能通过C++调用Matlab的接口来实现plot的部分功能。程序依赖代码依赖:Matlab,Eigen,Boost 测试版本:Matlab2015B,Eigen3.2.8,Boost1.57.0 适合人群:代码发烧友程序代码代码1:matlab.hpp#ifndef __MATLAB_HPP__#define __MATLAB_HPP__#include <engine.h>#inc原创 2016-05-03 23:06:26 · 8459 阅读 · 1 评论 -
常用代码段
1. 计时给出三种比较精确的计时方式,使用纯C语言,使用Boost和OpenCV的库函数。纯C// pure c#if defined(_WIN32) && defined(_MSC_VER) #include <windows.h> double abtic() { __int64 freq; __int64 clock; QueryPerformanceFreq原创 2016-04-30 11:01:52 · 1710 阅读 · 1 评论 -
C++ 调用Matlab画图
劳动节闲来无事,写了一天程序,just for fun.看,这是C++调用Matlab画图的一段程序。暂时不想多解释了,有兴趣的话,看看下面的代码吧。#include <iostream>#include <vector>#include <string>#include <algorithm>#include <cmath>#include <ctime>using namespace原创 2016-05-01 21:53:31 · 9429 阅读 · 3 评论 -
C/C++ 将数据乱序
我们在实现某些应用或者做测试的时候,需要将某些数据乱序。例如1,2,3三个数,随机乱序后,可能是2,1,3。最简单的方法是:输入一系列数,顺序访问每个位置的数,将当前位置的数与一个随机数相关的位置进行内容交换。纯C实现#include <stdio.h>#include <stdlib.h>// n : the length of an arrayint rand_id(int n){原创 2016-05-01 12:39:13 · 5541 阅读 · 1 评论 -
C++运算符重载
主要内容通过重载运算符实现复数的相关据算,通过实现复数这一数学概念来学习和理解如何使用C++运算符重载。代码#include <iostream>using namespace std;template<class T=float>class Complex{public: Complex(){} Complex(const T &real) : _real(real){}原创 2016-04-13 13:37:29 · 1064 阅读 · 0 评论 -
使用Boost program_options控制程序输入
简介很多人使用界面来输入数据,本文的程序介绍如何使用Boost的program_options控制输入。 程序中使用了: 1. 短选项 2. 可以指定多个参数的选项程序原创 2016-03-27 20:35:30 · 1129 阅读 · 0 评论 -
C/C++静态数组与动态数组的区别
简介以下三行代码有什么区别?int a[10];int *a = (int*)malloc(sizeof(int)*10);int *a = new int[10];第一行代码定义a为包含10个int类型元素的整形数组。第二行和第三行分别使用的是C和C++来定义动态数组,他们的结果是相同的。a都可以表示为一个动态数组。我们可以使用a[1]来取数组a的第1个元素。那他们有什么区别呢?解释我们原创 2016-04-25 19:11:38 · 10737 阅读 · 2 评论 -
C++格式化输出浮点数
介绍C++中如何格式化输出浮点数。控制浮点数输出格式需要包含iomanip头文件。原创 2016-04-12 18:29:03 · 5294 阅读 · 0 评论 -
OpenCV RGB2LAB执行效率测试
代码#include <iostream>#include <vector>#include <opencv2/opencv.hpp>#define ERROR_OUT__ std::cerr<<"[ERROR][File:"<<__FILE__<<"][Line:"<<__LINE__<<"]"#ifndef _DEBUG#define TB__(A) int64 A; A = cv::ge原创 2016-03-31 20:00:41 · 3886 阅读 · 0 评论 -
[Matlab+C/C++] 读写二进制文件
在处理某些数据的时候,可能涉及到文件的读写,如果用MATLAB存储为mat文件,那么其它程序读取这种数据就变得困难了。如果将数据存为文本文件,文件的解析过程就会变得比较长。幸运的是MATLAB可以读写自定义格式的二进制文件,基本所有程序语言(包括C/C++)在内,都是支持二进制文件的读写操作的。本文就介绍一下如何使用MATLAB和C/C++对二进制文件进行读写。原创 2016-03-08 01:08:00 · 5571 阅读 · 1 评论 -
对二维数据进行边界拓展
对二维数据处理的时候,经常遇到需要越界的问题,比如对图像进行滤波操作。对原始数据的边界进行拓展,然后使用拓展后的数据作处理,可以解决越界的问题。根据拓展出的数据的值来自哪里可以分为多种边界拓展方式,我们要实现的是将边界进行奇对称拓展。原创 2014-10-29 11:23:14 · 1611 阅读 · 0 评论 -
读取文本数据
输入文件:1 2 3 4 5 6输出原创 2014-08-07 22:26:52 · 1255 阅读 · 0 评论 -
GCC的几个重要选项解释
-c Compile or assemble code, but do not link-c 编译或者汇编代码,但是不链接-S Stop after compiling, but do not assemble-S 在编译之后停止,但不汇编-E Stop after preprocessing, but do not compile-E 预处理后停止,但不编译原创 2013-03-10 16:25:30 · 2726 阅读 · 1 评论 -
使用位运算节省计算
GPU计算对除法和取余计算比较耗时,幸运的是我们可以对某些除法和取余运算使用按位计算来代替。仅限整数1. 某个数x除以2的m次幂y x/y 与 x>>m的结果是一致的2. 某个数对2的m次幂取余 x%y 与 x&(y-1)是一致的原创 2013-01-21 21:31:30 · 2292 阅读 · 0 评论 -
Linux下计时小函数
每次测试程序时间,真是麻烦。写个简单点的函数,大家好复制粘贴就能用。函数定义:double mytic() { double result = 0.0; struct timeval tv; gettimeofday( &tv, NULL ); result = tv.tv_sec*1e6 + tv.tv_usec; return result;}原创 2013-01-20 15:12:28 · 1172 阅读 · 0 评论 -
Valgrind callgrind profile 多线程程序 命令
一句命令valgrind --tool=callgrind --separate-threads=yes your_app your_app_opertion这个命令执行结束后会产生 总线程数+1 个profile结果。用kcachegrind打开没有线程编号的那个可以看到所有线程的执行情况。原创 2013-01-25 19:40:36 · 3406 阅读 · 0 评论 -
C与C++混合编程的再度讨论
直接入题:首先大家要注意extern和extern "C"区别不小。1、函数在声明时以extern "C" 为前缀:* 此函数只能由c++编译器编译,生成的函数可以被C程序调用,也可以被C++语言调用。* C++编译器编译生成此函数的C linkage* C程序调用这个函数时,应该去掉extern "C"重新声明函数,上一篇文章中提到了如何使用__cplusplus这个宏来控制原创 2012-12-23 18:01:04 · 1224 阅读 · 0 评论 -
C++与C变量或函数的混合调用
第一部分:C++调用C变量或函数如果我想在C文件中实现某些功能,在CPP文件实现对这些功能的调用,我该如何做呢?先将程序贴出来,然后在分析:// file name : inct.h#ifndef _INCT_H_#define _INCT_H_#define NUM 8#ifdef __cplusplusextern "C" {#endif// global C原创 2012-12-23 10:37:52 · 3232 阅读 · 0 评论 -
语法错误 : 缺少“;”(在“类型”的前面)的解决方案
今天测试了一个以.c结尾的C语言程序。原始代码如下:#include #include int main(int argc, char **argv){ fprintf(stdout, "Hello C\n"); int i; for (i = 0; i < 10; i++) { fprintf(stdout, "%dst Hello C\n", i); } getch原创 2012-06-15 07:37:13 · 29542 阅读 · 11 评论