常用代码段
2016-04-30 11:01
459 查看
1. 计时
给出三种比较精确的计时方式,使用纯C语言,使用Boost和OpenCV的库函数。纯C
// pure c #if defined(_WIN32) && defined(_MSC_VER) #include <windows.h> double abtic() { __int64 freq; __int64 clock; QueryPerformanceFrequency((LARGE_INTEGER *)&freq); QueryPerformanceCounter((LARGE_INTEGER *)&clock); return ((double)clock / double(freq)) * 1.E6; } #else #include <time.h> #include <sys/time.h> double abtic() { double result = 0.0; struct timeval tv; gettimeofday(&tv, NULL); result = tv.tv_sec * 1000 * 1000 + tv.tv_usec; return result; } #endif /* _WIN32 */ #define __PUREC_TB(A) double A = abtic() #define __PUREC_TE(A) cout << #A << " : elapsed = " << (abtic()-A)*1.E-3 << "ms" << endl
With Boost
// with Boost #include <boost/timer/timer.hpp> #define __BOOST_TB(A) boost::timer::cpu_timer (A); (A).start() #define __BOOST_TE(A) A.stop(); cout << #A << " : Wall = " << ((A).elapsed().wall)*1.E-6 << "ms, User = " << ((A).elapsed().user)*1.E-6 << "ms, System = " << ((A).elapsed().system)*1.E-6 << "ms" << endl
With OpenCV
// with OpenCV #include <opencv2/opencv.hpp> #define __CV_TB(A) int64 A = cv::getTickCount(); #define __CV_TE(A) cout << #A << " : elapsed = " << (double)(cv::getTickCount()-A)/(cv::getTickFrequency())*1.E3 << "ms" << endl
使用方法
__PUREC_TB(purec); ... // some code __PUREC_TE(purec); __BOOST_TB(with_boost); ... // some code __BOOST_TE(with_boost); __CV_TB(with_OpenCV); ... // some code __CV_TE(with_OpenCV);
2. max_singed<>()
#include <inttypes.h> template <class T> int64_t max_signed(){ uint8_t l = sizeof(T)*8-8; int64_t r = 0x7f; for (uint8_t i = 0; i < l; i++){ r = (r << 1) + 1; } return r; }
cout << "max = " << max_signed<int8_t>() << endl; cout << "min = " << -max_signed<int8_t>()-1 << endl;
max = 127 min = -128
3. 待续……
相关文章推荐
- 常用代码段
- Code Hunt 题解 05-08 (Java)
- FTP连接报错530 Permission denied解决方法
- C语言中的atoi函数的实现
- [C++]详解异常处理(Exception Handling) 及标准库异常处理类
- PHP经典算法计算两个日期的差数
- 【JAVA】hashcode() & equals()
- qt 链接sqlite数据库
- c++ 智能指针用法详解
- Raspberry Pi 配置笔记二
- Eclipse上安装GIT插件EGit及使用
- Eclipse:The resource 'project name'is not accessible for lauching
- myeclipse项目导入到eclipse中缺jar包
- Git/Github的使用以及与Eclipse的整合
- Struts2注解配置之@Results和@Result
- C语言中结构体的直接赋值
- c++:template使用中的常见报错
- 【原创】堆排序(java实现)
- String、ANSIString、PChar及TBytes之间的转换 BytesOf move stringof
- Code Hunt 题解 00-04 (Java)