简体   繁体   English

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

[英]Generate Random Number in 2D Vector C++

I am implementing a simple 2D vector class in C++ which initialize a 2D vector with a given size (number of row and column) and whether to randomize the value or not. 我正在C ++中实现一个简单的2D向量类,该类将使用给定的大小(行和列数)以及是否随机化值来初始化2D向量。 I also implement the method to print the matrix to the console to see the result. 我还实现了将矩阵打印到控制台以查看结果的方法。

I have tried to run the code using GCC 8.3.0 in Windows (MSYS2) with flag "-std=c++17". 我试图在Windows(MSYS2)中使用带有标志“ -std = c ++ 17”的GCC 8.3.0运行代码。 Here is the code. 这是代码。

#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();
}

What I expected is a 2D vector with randomized value when 'isRandom' argument is true . 我期望的是当'isRandom'参数为true时具有随机值的2D向量。 Instead, I got vector with values being all the same. 相反,我得到的向量都是相同的。 For example. 例如。 when I run the code in my computer I got this: 当我在计算机上运行代码时,我得到了:

0.726249        0.726249        0.726249        0.726249
0.726249        0.726249        0.726249        0.726249
0.726249        0.726249        0.726249        0.726249

My question is what is wrong with my C++ code? 我的问题是我的C ++代码有什么问题? Thank you in advance for the answer. 预先感谢您的回答。

I think the generator should not be created each time, make this part member and only call dis 我认为不应每次都创建生成器,使其成为该成员并仅调用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);

and second, make sure you called 其次,请确保您致电

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

only once at the beging of the application 在申请开始时只有一次

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM