Цель - создать класс матрица, который бы умел создавать двумерные массивы заданных размеров, но со случайными значениями. Массив создаётся, но значения я получаю каждый раз одинаковые. Пожалуйста, подскажите, в чём проблема?
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
class Matrix
{
private:
int str;
int col;
int **mat;
public:
Matrix(int str, int col) //конструктор класса
{
this -> str = str;
this -> col = col;
mat = new int*[str];
for (int i = 0; i < str; i++)
{
mat[i] = new int[col];
}
cout << "Конструктор " << this << endl;
}
void FillMatrix() //метод заполнения
{
srand(time(NULL));
for (int i = 0; i < str; i++)
{
for (int j = 0; j < col; j++)
{
mat[i][j] = rand() %10;
}
}
}
void PrintMatrix() //вывод
{
for (int i = 0; i < str; i++)
{
for (int j = 0; j < col; j++)
{
cout << setw(4) << mat[i][j];
}
cout << endl;
}
cout << endl;
}
~Matrix() //деструктор, я его должен дописать.
{
delete[]mat;
cout << "Destruct" << this << endl << endl;
}
};
int main()
{
setlocale(LC_ALL, "ru");
Matrix a(3, 3);
Matrix b(3, 3);
b.FillMatrix();
a.FillMatrix();
a.PrintMatrix();
b.PrintMatrix();
}
Отсюда:
Для любого другого значения, передаваемого через параметр seed
, и
используемого при вызове функции srand
, алгоритм генерации
псевдо-случайных чисел может генерировать различные числа с каждым
последующим вызовом функции rand
. Если использовать одно и то же
значение seed
, с каждым вызовом функции rand
, алгоритм генерации
псевдо-случайных чисел будет генерировать ту же самую
последовательность чисел.
Я бы делал так:
#include <random>
class Matrix
{
private:
std::mt19937 random_generator_;
std::uniform_int_distribution<std::uint8_t> rand_uid(0, 9);
public:
Matrix() //конструктор класса
{
std::random_device random_device;
random_generator_.seed(random_device());
}
void FillMatrix() //метод заполнения
{
for (int i = 0; i < str; i++)
{
for (int j = 0; j < col; j++)
{
mat[i][j] = rand_uid(random_generator_));
}
}
}
};
Виртуальный выделенный сервер (VDS) становится отличным выбором
Занимаюсь подписанием строкиОбычная подпись проходит
Пытаюсь освоить новый для себя c++ и пишу приложение "blackjack"На данный момент уже долгое время ломаю голову над этой ошибкой - Необработанное...