注 这个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的更多相关文章

  1. 有关Rander生成随机数的问题

    首先我们说的是要生成一个随机数要求传入两个参数.一个表示生成的个数,另外一个表示生成的长度 . public void shengchengsuijishu(int lenght) { '}; Ran ...

  2. rander()函数执行条件

    调用this.setState({}),如果数据改变了,rander()就行执行

  3. 把iview中的table组件写成了一个公用组件,在另一个组件里去引用它的时候rander函数里的this指向不正确

    在vue项目里使用iview制作后台管理系统时,由于有多个页面都需要用到table组件,所以就把table写到了一个公共组件里,在其他页面去引用它,但是这时会发现一个问题,就是render函数里的th ...

  4. 使用rander() 将后台的数据传递到前台界面显示出来

    1.创建templates文件夹 2.在该文件夹内创建html界面a.html 3.views.py: def a(request): love='iloveyou' return render(re ...

  5. Android之登录那点事

    随着互联网的高速发展,一个应用为了保护用户的隐私,通常会通过设置用户名+密码的验证方式保证用户隐私的相对安全,我知道一般网站的登录验证,通常会设置一个二维码,通过验证二维码,防止恶意软件通过机械程序, ...

  6. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  7. 性能更好的js动画实现方式——requestAnimationFrame

    用js来实现动画,我们一般是借助setTimeout或setInterval这两个函数,css3动画出来后,我们又可以使用css3来实现动画了,而且性能和流畅度也得到了很大的提升.但是css3动画还是 ...

  8. Ue4全景图制作设想

    官方有个Scene Capture Cube与Cube Rander Target. 之后再想办法生成文件就好了吧

  9. three.js 显示一个绿色的正方体

    第一个框架的效果是显示一个绿色的正方体 <!DOCTYPE html> <html> <head> <title></title> < ...

  10. 【Machine Learning】wekaの特征选择简介

    看过这篇博客的都应该明白,特征选择代码实现应该包括3个部分: 搜索算法: 评估函数: 数据: 因此,代码的一般形式为: AttributeSelection attsel = new Attribut ...

随机推荐

  1. 5、Git之版本号

    5.1.概述 每一次提交,Git 都会生成相关的版本号:每个版本号由 40 位 16 进制的数字组成. 这 40 位 16 进制的数字,是根据提交的内容,通过 SHA-1 算法计算出来的. 版本号具体 ...

  2. DirectX9(D3D9)游戏开发:高光时刻录制和共享纹理的踩坑

    共享纹理 老游戏使用directx9无法直接与cc高光sdk(d3d11)对接,但是d3d9ex有共享纹理,我们通过共享纹理把游戏画面共享给cc录制,记录一些踩坑的笔记. 共享纹理示例: // 初始化 ...

  3. 代码随想录Day4

    24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: 输入:head = [1, ...

  4. Jax框架的Traced object特性与TensorFlow的placeholder的一致性

    前文: Jax框架的static与Traced Operations -- Static vs Traced Operations 前文讨论分析了Jax的static特性和Traced特性,这些谈下个 ...

  5. 【转载】 NFS服务器端的权限设置学习 Linux运维学习

    原文地址: http://blog.chinaunix.net/uid-31484238-id-5785140.html ======================================= ...

  6. WarpDrive 教程 第一部分修改版

    本文参考: https://www.cnblogs.com/devilmaycry812839668/p/15327509.html warpDrive是一个python库,目的是使用GPU并行运行多 ...

  7. 利用 Amazon EMR Serverless、Amazon Athena、Apache Dolphinscheduler 以及本地 TiDB 和 HDFS 在混合部署环境中构建无服务器数据仓库(一)云上云下数据同步方案设计

    引言 在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求.本系列博客从一个重视数据安全和合规性的 B2C 金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云 ...

  8. Linux系统中目录和文件夹是一个东西吗

    目录和文件夹的区别   在阐述Linux系统的目录前,我们先来回忆一下现实中的目录和文件夹是什么:   在现实中,文件夹(封套)可以用来保存几个文件(或其他项目).而目录则可以用来维护项目的索引,这样 ...

  9. 21-canvas事件监听

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  10. 【CDQ分治】【模板】三维偏序(陌上花开)

    P3810 [模板]三维偏序(陌上花开) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc++.h> using namespace ...