随机不工作 + 在 C++ 中计算时间
random not working + counting time in C++
当运行下面的代码时,我得到以下错误。你能向我解释为什么以及我应该做什么吗?我在网上找到了与图书馆相关的代码,但它不起作用。我正在使用 DevC++ 5.11。
- default_random_engine 不是 'std'
的成员
- uniform_real_distribution 不是 'std'
的成员
- 'generator' 未在此范围内声明
- '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_engine
和 uniform_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;
}
当运行下面的代码时,我得到以下错误。你能向我解释为什么以及我应该做什么吗?我在网上找到了与图书馆相关的代码,但它不起作用。我正在使用 DevC++ 5.11。
- default_random_engine 不是 'std' 的成员
- uniform_real_distribution 不是 'std' 的成员
- 'generator' 未在此范围内声明
- '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_engine
和 uniform_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;
}