c ++随机集种子失败

问题描述 投票:1回答:2

我试图将种子设置为c ++ std :: default_random_engine:

#include<random>
#include<time.h>
#include<iostream>

using namespace std;


void print_rand();


int main() {

for (int i{0}; i < 20; ++i) {
    print_rand();
}
return 0;
}

void print_rand() {
    default_random_engine e;
    e.seed(time(0));

    cout << e() << endl;
}  

似乎打印的数字是相同的,我怎么能设置种子根据时间生成随机数?

c++11 random
2个回答
2
投票

作为@ P.W。说,你应该只播种一次。该方向的最小变化是使用静态变量,并将种子赋予构造函数:

#include<random>
#include<time.h>
#include<iostream>

void print_rand();

int main() {
    for (int i{0}; i < 20; ++i) {
        print_rand();
    }
    return 0;
}

void print_rand() {
    static std::default_random_engine e(time(0));

    cout << e() << endl;
}

3
投票

您必须只播种一次而不是每次调用该函数。然后你会得到不同的价值观。我将把功能移到main()来证明这一点。

#include<random>
#include<time.h>
#include<iostream>

int main() {
    std::default_random_engine e;
    e.seed(time(0));

    for (int i{0}; i < 20; ++i) {
        std::cout << e() << std::endl;
    }
    return 0;
}

Live Demo

© www.soinside.com 2019 - 2024. All rights reserved.