我是C++的初学者,我正在尝试探索C++11特性。在这里,我试图熟悉新的随机性产生引擎。
我总结了关于这个主题的教程中的以下代码,并注意到了两件事:
1- uniform_real_distribution doe不包括最大值。
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。
发布于 2018-04-30 14:28:41
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";
}https://stackoverflow.com/questions/50096448
复制相似问题