c ++ случайный набор семян не удалось - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь установить seed для 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;
}  

Кажется, что напечатанные числа одинаковы, как я мог установить seed для генерации случайного числа в соответствии с временем

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Как сказал @PW, вы должны сеять только один раз.Минимальным изменением в этом направлении будет использование статической переменной с начальным значением, заданным для конструктора:

#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;
}
0 голосов
/ 22 февраля 2019

Вы должны заполнять только один раз, а не каждый раз, когда вызывается функция.Тогда вы получите разные значения.Я перенесу функциональность на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...