均匀分布的随机数生成器,转自KCP测试源码

#include<stdlib.h>
#include <vector>
class Random
{
public:
	Random(int size) {
		this->size = 0;
		seeds.resize(size);
	}

	int random() {
		int x, i;
		if (seeds.size() == 0) return 0;
		if (size == 0) { //第一次运行或返回了所有值之后需重新进行初始化操作
			for (i = 0; i < (int)seeds.size(); i++) {
				seeds[i] = i;
			}
			size = (int)seeds.size();
		}
		i = rand() % size;//取模操作,控制返回值取值范围
		x = seeds[i];//返回对应位置的值
		seeds[i] = seeds[--size];//移除对应位置的值,同时缩小下次返回值取值区间
		return x;
	}

protected:
	int size;//记录当前返回值取值区间
	std::vector<int> seeds;
};

猜你喜欢

转载自blog.csdn.net/xuyuanwang19931014/article/details/89844536