Почему srand(time(0)) не работает в шаблонной функции?

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
using namespace std;
template <class T>
void setArray(T **arr, int rows, int cols) {
    srand(time(0)); //НЕ РАБОТАЕТ ГСЧ
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            arr[i][j] = 1 + rand() % 10;
        }
    }
}
int main() {
    //srand(time(0)); - если в main() - то ОК
    setlocale(LC_ALL, "");
    int rows, cols;
    cout << "Введите размеры двумерного массива:\n";
    cout << "Кол-во строк: ";
    cin >> rows;
    cout << "Кол-во столбцов: ";
    cin >> cols;
    int **arr1 = createArray<int>(rows, cols);
    setArray(arr1, rows, cols);
    printArray(arr1, rows, cols);
    cout << endl;

    int **arr2 = createArray<int>(rows, cols);
    setArray(arr2, rows, cols);
    printArray(arr2, rows, cols);
    cout << endl << endl;


    delete[] arr1;
    delete[] arr2;
    _getch();
    return 0;
}

Если srand(time(0)) поместить в шаблон, то эта функция не срабатывает, а если она находится в main'е, то всё работает. Почему?


Ответы (1 шт):

Автор решения: Harry

Она работает, но не так, как вы думаете. Она сбрасывает генератор при каждом вызове, так что если вы в пределах одной секунды (огромное время!) вызовете вашу setArray дважды, то она и выдаст один и тот же результат - и ГПСЧ будет выдавать одни и те же значения.

→ Ссылка