当我运行这段代码只是卡在for循环中,你能解释一下为什么吗?
#include<iostream>
#include<random>
#include<ctime>
int main()
{
using std::cout;
using std::endl;
using std::cin;
using std::mt19937;
using std::minstd_rand;
using std::uniform_int;
using std::normal_distribution;
// engines
mt19937 rng;
minstd_rand gen;
// distributions
uniform_int<int> dist(0, 37);
normal_distribution<short> norm(4, 3);
// initializaiton
rng.seed(static_cast<unsigned int>(time(false)));
gen.seed(static_cast<unsigned short>(time(false)));
// generate numbers
for(int i = 0; i < 10; ++i)
std::cout << dist(rng) << " " << norm(gen) << endl; // This is as far as this code goes
cin.get();
return 0;
}
最佳答案
std::uniform_int
不是 C++11。你应该使用 std::uniform_int_distribution
.和 std::normal_distribution<T>
需要 T
为浮点类型(C++11 标准 26.5.8.5.1)。
事实上,如果你有 gcc >= 4.5,你应该会得到一个类似这样的错误:
/opt/local/include/gcc47/c++/bits/random.h: In instantiation of 'class std::normal_distribution<short int>':
my_random.cpp:21:36: required from here
/opt/local/include/gcc47/c++/bits/random.h:1982:7: error: static assertion failed: template argument not a floating point type
关于c++ - 随机数正态分布挂程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369773/