定义通用类型,便于移植和32位、64位的编译

inline ldouble random_ldouble(ldouble low = 0.0, ldouble high = 1.0) {
	std::uniform_real_distribution<ldouble> distribution(low, high);
	std::mt19937 generator;
	static std::function<ldouble()> fdouble = std::bind(distribution, generator);
	return fdouble();
}

inline integer random_integer(integer low = 0, integer high = std::numeric_limits<integer>::max()) {
	std::uniform_int_distribution<integer> distribution(low, high);
	std::mt19937 generator;
	static std::function<integer()> finteger = std::bind(distribution, generator);
	return finteger();
}

 

  要实现以后的方便移植,并且实现x64和x86的编译不报错,那肯定要先定义一些通用类型。

需要包含的头文件

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
#include <vector>
#include <iomanip>
#include <functional>
#include <random>
#include <cmath>
#include <cassert>

通用类型以及一些有用的宏

typedef char int8;//兼容char, int8_t, signed char
typedef uint8_t u_int8;
typedef int16_t int16;
typedef uint16_t u_int16;
typedef int32_t int32;
typedef uint32_t u_int32;
typedef int64_t int64;
typedef uint64_t u_int64;
typedef long double ldouble;

#define MAKEINT16(x, y)  ((u_int16)(((u_int8)(((u_int32)(x)) & 0xff)) | ((u_int16)((u_int8)(((u_int32)(y)) & 0xff))) << 8))
#define MAKEINT32(x,y)  ((u_int32)(((u_int16)(((u_int32)(x)) & 0xffff)) | ((u_int32)((u_int16)(((u_int32)(y)) & 0xffff))) << 16))
#define MAKEINT64(x,y) ((u_int64)(((u_int32)(((u_int64)(x)) & 0xffffffff)) | ((u_int64)((u_int32)(((u_int64)(y)) & 0xffffffff))) << 32))
#define LOWINT16(l) ((u_int8)(((u_int16)(l)) & 0xff))
#define HIGHINT16(l) ((u_int8)((((u_int16)(l)) >> 8) & 0xff))
#define LOWINT32(l) ((u_int16)(((u_int32)(l)) & 0xffff))
#define HIGHINT32(l) ((u_int16)((((u_int32)(l)) >> 16) & 0xffff))
#define LOWINT64(l) ((u_int32)(((u_int64)(l)) & 0xffffffff))
#define HIGHINT64(l) ((u_int32)((((u_int64)(l)) >> 32) & 0xffffffff))

#define radian(deg) ((M_PI / 180) * deg)
#define degree(rad) ((180 / M_PI) * rad)

#ifdef _WIN64
typedef signed __int64 integer;
typedef unsigned __int64 u_integer;
#define MAKEINT(x, y) MAKEINT64(x,y)
#define HIGHINT(l) HIGHINT64(l)
#define LOWINT(l) LOWINT64(l)
#else
typedef signed __int32 integer;
typedef unsigned __int32 u_integer;
#define MAKEINT(x, y) MAKEINT32(x,y)
#define HIGHINT(l) HIGHINT32(l)
#define LOWINT(l) LOWINT32(l)
#endif

inline ldouble max(ldouble a, ldouble b) {
	return a > b ? a : b;
}

inline ldouble min(ldouble a, ldouble b){
	return a < b ? a : b;
}

两个经常用到的随机函数,不用伪随机了,而是用c++新特性里面的真正的随机函数

inline ldouble random_ldouble(ldouble low = 0.0, ldouble high = 1.0) {
	std::uniform_real_distribution<ldouble> distribution(low, high);
	std::mt19937 generator;
	static std::function<ldouble()> fdouble = std::bind(distribution, generator);
	return fdouble();
}

inline integer random_integer(integer low = 0, integer high = std::numeric_limits<integer>::max()) {
	std::uniform_int_distribution<integer> distribution(low, high);
	std::mt19937 generator;
	static std::function<integer()> finteger = std::bind(distribution, generator);
	return finteger();
}

  

我把这个文件命名为Types.h,方便以后写通用32位和64位的程序使用。并且我把关键代码全放到了lib里面(新建项目时,选择静态lib就行了),方便其他项目调用。效果如下图

 

猜你喜欢

转载自www.cnblogs.com/dalgleish/p/12602709.html