[C++] Rander
注 这个Rander对单个数据的平均分散不太优秀,但是获取大量数据十分平均
当前版本 2.0 for Windows
功能
int rander::reset() 按默认大小重置随机数序列,返回默认大小. (自动检测更新,无需手动).
int rander::reset(int size) 按 \(size\) 重置随机数序列,返回重置大小,失败返回 \(-1\).
vector<long long> rander::randlist(int size) 返回一个 \(size\) 大小的随机数序列,范围为 \([0,2^{32}-1]\).
int rander::rand() 返回一个随机数,范围为 \([-2^{31},2^{31}-1]\).
int rander::rand(int mod) 返回一个随机数,范围为 \([-mod,mod-1]\). 最大范围为 \([-2^{31},2^{31}-1]\)
long long rander::randabs(int mod) 返回一个随机数,范围为 \([0,mod-1]\). 最大范围为 \([0,2^{32}-1]\).
long long rander::rand(int l,int r) 返回一个随机数,范围为 \([l,r]\),最大范围为 \([0,2^{32}-1]\).
T from(vector<T> p) 从给定任意列表中随机返回一个.
void randsort(vector<T> &p) 把给定的任意列表打乱.
void randsort(T &p,int from,int to) 把给定的任意数组的 \([from,to]\) 下标内的元素随机打乱.
代码
#include<bits/stdc++.h>
using namespace std;
namespace rander{
	vector<long long> list;
	int it,ssize;
	int reset(int size){if(size<=0)return -1;int seed=std::rand();mt19937 Rand(seed);ssize=size;it=0;list.clear();for(int i=1;i<=size;++i){list.push_back(Rand());}return seed;}
	int reset(){struct _timeb T;_ftime(&T);srand(T.millitm);return rander::reset(1000);}
	vector<long long> randlist(int size){int seed=ssize;reset(size);vector<long long> ret=list;reset(seed);return ret;}
	int rand(){if(ssize<=0)reset();int ret=list[it];it++;if(it>=ssize)reset(ssize);return ret;}
	int rand(int mod){int ret=rander::rand()%mod;return ret;}
	long long randabs(int mod){long long ret=abs(rander::rand());if(mod)ret%=mod;return ret;}
	long long rand(int l,int r){if(l<0)return rander::rand(0,r);long ret=rander::randabs(r-l+1)+l;return ret;}
	template<typename _T>_T from(vector<_T>p){long long ret=rander::randabs(p.size());return p[ret];}
	template<typename _T>void randsort(vector<_T>&p){for(int i=1;i<=p.size();++i){int x=rander::rand(0,p.size()-1),y=rander::rand(0,p.size()-1);swap(p[x],p[y]);}}
	template<typename _T>void randsort(_T &p,int from,int to){for(int i=1;i<=to-from+1;++i){int x=rander::rand(from,to),y=rander::rand(from,to);swap(p[x],p[y]);}}
};
使用例
获取随机数
using namespace rander;
int a=rand(114514);
int x=rand(1,114514);
随机选取内容
using namespace rander;
vector<string> x{"e","k"};
cout<<from(x)<<endl;
cout<<from<string>({"e","k"})<<endl;
随机打乱
uaing namespace rander;
vector<string> x{"e","k","r"};
randsort(x);
double a[4]={1.0,2.1,3.23,2.23};
randsort(a,0,3);
历史版本
1.0 for Windows
#include<bits/stdc++.h>
using namespace std;
class rander{
	private:
	vector<long long> list;
	int it,ssize;
	public:
	int reset(int size){if(size<=0)return -1;int seed=std::rand();mt19937 Rand(seed);ssize=size;it=0;list.clear();for(int i=1;i<=size;++i){list.push_back(Rand());}return seed;}
	int reset(){struct _timeb T;_ftime(&T);srand(T.millitm);return rander::reset(1000);}
	vector<long long> randlist(int size){int seed=ssize;reset(size);vector<long long> ret=list;reset(seed);return ret;}
	int rand(){if(ssize<=0)reset();int ret=list[it];it++;if(it>=ssize)reset(ssize);return ret;}
	int rand(int mod){int ret=rander::rand()%mod;return ret;}
	long long randabs(int mod){long long ret=abs(rander::rand());if(mod)ret%=mod;return ret;}
	long long rand(int l,int r){long long ret=rander::randabs(r-l+1)+l;return ret;}
	int randfrom(vector<int> &p){long long ret=rander::randabs(p.size());return p[ret];}
	string randfrom(vector<string> &p){long long ret=rander::randabs(p.size());return p[ret];}
};
1.5 for Windows
#include<bits/stdc++.h>
using namespace std;
namespace rander{
	vector<long long> list;
	int it,ssize;
	int reset(int size){if(size<=0)return -1;int seed=std::rand();mt19937 Rand(seed);ssize=size;it=0;list.clear();for(int i=1;i<=size;++i){list.push_back(Rand());}return seed;}
	int reset(){struct _timeb T;_ftime(&T);srand(T.millitm);return rander::reset(1000);}
	vector<long long> randlist(int size){int seed=ssize;reset(size);vector<long long> ret=list;reset(seed);return ret;}
	int rand(){if(ssize<=0)reset();int ret=list[it];it++;if(it>=ssize)reset(ssize);return ret;}
	int rand(int mod){int ret=rander::rand()%mod;return ret;}
	long long randabs(int mod){long long ret=abs(rander::rand());if(mod)ret%=mod;return ret;}
	long long rand(int l,int r){if(l<0)return rander::rand(0,r);long ret=rander::randabs(r-l+1)+l;return ret;}
	int from(vector<int> p){long long ret=rander::randabs(p.size());return p[ret];}
	string from(vector<string> p){long long ret=rander::randabs(p.size());return p[ret];}
};
												
											[C++] Rander的更多相关文章
- 有关Rander生成随机数的问题
		
首先我们说的是要生成一个随机数要求传入两个参数.一个表示生成的个数,另外一个表示生成的长度 . public void shengchengsuijishu(int lenght) { '}; Ran ...
 - rander()函数执行条件
		
调用this.setState({}),如果数据改变了,rander()就行执行
 - 把iview中的table组件写成了一个公用组件,在另一个组件里去引用它的时候rander函数里的this指向不正确
		
在vue项目里使用iview制作后台管理系统时,由于有多个页面都需要用到table组件,所以就把table写到了一个公共组件里,在其他页面去引用它,但是这时会发现一个问题,就是render函数里的th ...
 - 使用rander() 将后台的数据传递到前台界面显示出来
		
1.创建templates文件夹 2.在该文件夹内创建html界面a.html 3.views.py: def a(request): love='iloveyou' return render(re ...
 - Android之登录那点事
		
随着互联网的高速发展,一个应用为了保护用户的隐私,通常会通过设置用户名+密码的验证方式保证用户隐私的相对安全,我知道一般网站的登录验证,通常会设置一个二维码,通过验证二维码,防止恶意软件通过机械程序, ...
 - 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
		
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
 - 性能更好的js动画实现方式——requestAnimationFrame
		
用js来实现动画,我们一般是借助setTimeout或setInterval这两个函数,css3动画出来后,我们又可以使用css3来实现动画了,而且性能和流畅度也得到了很大的提升.但是css3动画还是 ...
 - Ue4全景图制作设想
		
官方有个Scene Capture Cube与Cube Rander Target. 之后再想办法生成文件就好了吧
 - three.js 显示一个绿色的正方体
		
第一个框架的效果是显示一个绿色的正方体 <!DOCTYPE html> <html> <head> <title></title> < ...
 - 【Machine Learning】wekaの特征选择简介
		
看过这篇博客的都应该明白,特征选择代码实现应该包括3个部分: 搜索算法: 评估函数: 数据: 因此,代码的一般形式为: AttributeSelection attsel = new Attribut ...
 
随机推荐
- Python按条件筛选、剔除表格数据并绘制剔除前后的直方图
			
本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除:同时,对筛选前.后的数据分别绘 ...
 - vue小知识~使用$attrs和$listeners接收父组件转来的属性和方法
			
一般下我们子组件获取父组件传过来的的值得时候,我们是使用props来接收,但是如果我们父组件转过来的值是给孙组件使用时,使用哪个props接收的方式太过麻烦. 这是vue为我们提供了一个实例$attr ...
 - Python elasticsearch-py类库基础用法
			
实践环境 https://pypi.org/project/elasticsearch/ pip install elasticsearch==7.6.0 离线安装包及依赖包下载地址: https:/ ...
 - 题解:CF1971D Binary Cut
			
题解:CF1971D Binary Cut 题意 给予你一个 \(01\) 字符串,你可以将它分割,分割后必须排成先 \(0\) 后 \(1\) 的格式. 求最少分割为几部分. 思路 将 \(0\) ...
 - 🚀RabbitMQ+redis+Redisson分布式锁+seata实现订单服务
			
引言 订单服务涉及许多方面,分布式事务,分布式锁,例如订单超时未支付要取消订单,订单如何防止重复提交,如何防止超卖.这里都会使用到. 开启分布式事务可以保证跨多个服务的数据操作的一致性和完整性, 使用 ...
 - 【教程】解决npm 报错 npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
			
问题描述 只要在控制台执行npm,不论有没有参数,都会有此警告: npm WARN config global `--global`, `--local` are deprecated. Use `- ...
 - windows环境xampp搭建php电商项目/搭建禅道
			
windows环境xampp搭建php论坛/电商项目 一,首先下载xampp https://www.apachefriends.org/zh_cn/index.html 下载之后解压到E盘或者F盘的 ...
 - vue加载三维模型
			
创建项目 我使用的是Vue CLI3,具体创建不再赘述,网上教程很多 下载SuperMap iClient3D for WebGL产品包 链接:http://support.supermap.com. ...
 - vue之es6语法
			
1.背景 2.let与var与const的区别 <!DOCTYPE html> <html lang="en"> <head> <meta ...
 - [POI2015] POD 题解
			
前言 题目链接:洛谷. 题意简述 长度为 \(n\) 的一串项链,每颗珠子是 \(k\) 种颜色之一.第 \(i\) 颗与第 \(i-1, i+1\) 颗珠子相邻,第 \(n\) 颗与第 \(1\) ...