我是C ++的初学者,我正在尝试探索C ++ 11的功能。在这里,我试图熟悉新的随机性生成引擎。
我从这个主题的教程中总结了以下代码,我注意到两件事:
1- uniform_real_distribution
不包括最大值
2-注释行产生错误,尽管它似乎在教程中正常工作。
#include <iostream>
#include <random>
#include <chrono>
#include <string>
using namespace std;
int main(){
unsigned seed = 201;
//seed = chrono::steady_clock()::now().time_since_epoch().count();
default_random_engine e(seed);
uniform_real_distribution<double> u(0,9);
vector<double> v(10);
int num;
for(int i = 0; i < 400; ++i){
num = u(e);
++v[num];
}
for (int i = 0; i < 10; ++i)
cout << i << ": " << string(v[i],'*') << "\n";
}
我试图找到这两件事的原因而没有运气。
所以,我的问题:
1-如何包含最大值?
2-为什么在取消注释chrono
行时出现错误?
cannot convert 'std::chrono::_V2::steady_clock' to 'unsigned int' in initialization
注意:我使用的是MinGW64 g ++和c ++ 14。
答案 0 :(得分:1)
nextafter
作为uniform_real_distribution
的第二个参数。chrono::steady_clock
(带chrono::steady_clock()
),然后尝试从此对象调用静态成员now()
。由于now()
是chrono::steady_clock
的静态成员函数,您可以(并且应该)直接调用chrono::steady_clock::now()
。
最终代码:
#include <iostream>
#include <random>
#include <chrono>
#include <string>
using namespace std;
int main(){
unsigned seed = 201;
seed = chrono::steady_clock::now().time_since_epoch().count();
default_random_engine e(seed);
uniform_real_distribution<double> u(0,std::nextafter(9, std::numeric_limits<double>::max()));
vector<double> v(10);
int num;
for(int i = 0; i < 400; ++i){
num = u(e);
++v[num];
}
for (int i = 0; i < 10; ++i)
cout << i << ": " << string(v[i],'*') << "\n";
}