在 2D 矢量C++中生成随机数

Generate Random Number in 2D Vector C++

本文关键字:随机数 C++ 2D 矢量      更新时间:2023-10-16

我正在C++中实现一个简单的 2D 向量类,该类初始化具有给定大小(行数和列数(的 2D 向量以及是否随机化该值。我还实现了将矩阵打印到控制台以查看结果的方法。

我尝试在Windows(MSYS2(中使用GCC 8.3.0运行代码,并带有标志"-std=c ++ 17"。这是代码。

#include <random>
#include <iostream>
#include <vector>

class Vec2D
{
public:
    Vec2D(int numRows, int numCols, bool isRandom)
    {
        this->numRows = numRows;
        this->numCols = numCols;
        for(int i = 0; i < numRows; i++) 
        {
            std::vector<double> colValues;
            for(int j = 0; j < numCols; j++) 
            {
                double r = isRandom == true ? this->getRand() : 0.00;
                colValues.push_back(r);
            }
            this->values.push_back(colValues);
        }
    }
    double getRand()
    {
        std::random_device rd;
        std::mt19937 gen(rd());
        std::uniform_real_distribution<> dis(0,1);
        return dis(gen);
    }
    void printVec2D()
    {
        for(int i = 0; i < this->numRows; i++) 
        {
            for(int j = 0; j < this->numCols; j++)
            {
                std::cout << this->values.at(i).at(j) << "t";
            }
        std::cout << std::endl;
        }
    }
private:
    int numRows;
    int numCols;
    std::vector< std::vector<double> > values;
};
int main()
{
    Vec2D *v = new Vec2D(3,4,true);
    v->printVec2D();
}

我期望的是当"isRandom"参数true时具有随机值的 2D 向量。相反,我得到了值都相同的向量。例如。当我在计算机中运行代码时,我得到了这个:

0.726249        0.726249        0.726249        0.726249
0.726249        0.726249        0.726249        0.726249
0.726249        0.726249        0.726249        0.726249
我的

问题是我的C++代码有什么问题?提前感谢您的回答。

我认为不应该每次都创建生成器,使这部分成为成员,只调用dis

    std::random_device rd; //Will be used to ***obtain a seed for the random number engine***
    std::mt19937 gen(rd());
    std::uniform_real_distribution<> dis(0,1);

其次,确保你打电话

std::srand(std::time(nullptr));

仅在应用程序乞求时一次