c++ - 随机数正态分布挂程序?

标签 c++ random c++11

当我运行这段代码只是卡在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/

相关文章:

c++ - 编译错误 'nullptr' 未声明的标识符

php - 从基色开始,如何生成总体上美观的线图颜色范围(数量未知)?

c++ - 如何使用 tensorflow c++ API 导入元图?

c++ - 返回本地创建的 const char*

c++ - boost 中是否有等效的 std::sample ?

c++ - 在 C++ 中获取均匀分布的随机整数的标准方法是什么?

java - 两种设计循环方式的区别

c++ - 转发声明 typedef 保护

c++ - Boost.Filesystem 和 C++ 标准文件系统库有多相似?

c++ - 在 vector 之间使用 std::swap 还是 vector::swap?