随机不工作 + 在 C++ 中计算时间

random not working + counting time in C++

当运行下面的代码时,我得到以下错误。你能向我解释为什么以及我应该做什么吗?我在网上找到了与图书馆相关的代码,但它不起作用。我正在使用 DevC++ 5.11。

  1. default_random_engine 不是 'std'
  2. 的成员
  3. uniform_real_distribution 不是 'std'
  4. 的成员
  5. 'generator' 未在此范围内声明
  6. 'distribution' 未在此范围内声明

另外,我如何在 C++ 中计算时间?

    #include <iostream>
    #include <random> 

    int main() {        

    int i, j, n, nmax;   
    std::default_random_engine generator;   
    std::uniform_real_distribution<double> distribution(0.0,1.0);                                   
    nmax = 3000;    

    for (n=200; n<nmax; i+=200) {       
       double x[n], y[n], A[n][n];      
       for (i=0; i<n; i++) {            
          x[i] = distribution(generator);           
          y[i] = 0;             
          for (j=0; j<n; j++) {
             A[i][j] = distribution(generator);             
          }         
       }        
       // start counting time 
       for (i=0; i<n; i++) {            
          for (j=0; j<n; j++) {
             y[i] = A[i,j] * x[j];          
          }         
       }        
       // stop counting time        
       // total_time = stop - start         
       // std::cout << total_time   
    } 
    return 0;    
    }

代码中的错误:

1. default_random_engineuniform_real_distribution 不是 C++98 标准,所以所有四个错误都与此有关。你应该在你的机器上安装 C++11 编译器。 Here 如果你在选项部分玩过标准,你就会明白我的意思。

2.将A[i,j]改为A[i][j].

3. 您应该在第一个 for 循环中将 i+=200 更改为 n+=200

4. 你可以这样创建二维向量:
vector<vector<int>> vec(row_num, vector<int>(col_num));

计算执行时间 开始,您可以使用 <time.h>。这是使用 std::vector:

的工作代码
#include <iostream>
#include <random> 
#include <time.h>
#include <vector>

int main()
{
    int nmax;
    std::default_random_engine generator;
    std::uniform_real_distribution<double> distribution(0.0,1.0);
    nmax = 3000;

    for (int n=200; n < nmax; n+=200) {
        std::vector<double> x(n);
        std::vector<double> y(n);
        std::vector< std::vector<double> > A(n, std::vector<double>(n));

        for (int i=0; i<n; i++) {
            x[i] = distribution(generator);
            y[i] = 0;

            for (int j=0; j<n; j++) {
                A[i][j] = distribution(generator);
            }
        }

        // start counting time
        clock_t start = clock();
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                y[i] = A[i][j] * x[j];
            }
        }
        // stop counting time
        clock_t stop = clock();
        // total_time = stop - start
        double elapsed = (double)(stop - start) * 1000.0 / CLOCKS_PER_SEC;
        std::cout << "Elapsed time: " << elapsed << std::endl;
    }
    return 0;
}