Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何重置随机数引擎?_C++_Random_C++11 - Fatal编程技术网

C++ 如何重置随机数引擎?

C++ 如何重置随机数引擎?,c++,random,c++11,C++,Random,C++11,我尝试使用C++11方法生成随机数: #include <random> #include <functional> #include <iostream> int main(int argc, char *argv[]) { std::normal_distribution<double> normal(0, 1); std::mt19937 engine; // Mersenne twister MT19937

我尝试使用C++11方法生成随机数:

#include <random>
#include <functional>
#include <iostream>

int main(int argc, char *argv[])
{    
    std::normal_distribution<double> normal(0, 1);
    std::mt19937 engine; // Mersenne twister MT19937
    auto generator = std::bind(normal, engine);

    int size = 2;

    engine.seed(0);
    normal.reset();
    for (int i = 0; i < size; ++i)
        std::cout << generator() << std::endl;

    std::cout << std::endl;

    engine.seed(1);
    normal.reset();
    for (int i = 0; i < size; ++i)
        std::cout << generator() << std::endl;

    std::cout << std::endl;

    engine.seed(0);
    normal.reset();
    for (int i = 0; i < size; ++i)
        std::cout << generator() << std::endl;

    return 0;
}
这意味着第一个和第三个序列是不相同的,即使它们是用相同的数字播种的。拜托,我做错什么了?是

std::normal_distribution<double>
std::正态分布

只是数学意义上的一个函数(确定地从x中产生y)还是我遗漏了什么?如果它只是一个函数,那么reset方法实际上是做什么的?

您正在绑定引擎和发行版,下面的reset调用不会影响绑定函数

解决方案是将引用绑定到引擎和发行版

auto generator = std::bind(std::ref(normal), std::ref(engine));

您遇到的问题是
std::bind
<代码>标准::绑定复制其参数。
std::bind
复制的原因是函数将在将来某个未知点调用,此时参数可能不再存在。这意味着您对
引擎.seed()等的调用是无用的。使用
std::ref
可以通过引用绑定参数,从而获得预期的输出

auto generator = std::bind(std::ref(normal), std::ref(engine));

就这样。我想我必须学习STL更多:)它与您的解决方案完美配合。谢谢<代码>自动生成器=标准::绑定(正常,标准::引用(引擎))我想已经足够了。