我将直接进入:我的教授给了我一段代码,它应该生成随机数,我的编译器(g ++)不断抛出这些错误:“警告:指向算术中使用的函数的指针[ - Wpointer-arith] rand [i] =((double)rand()/(static_cast(RAND_MAX)+ 1.0))*(high - low)+ low;“ “错误:从'std :: vector'类型无效转换为'double'rand'[i] =((double)rand()/(static_cast(RAND_MAX)+ 1.0))*(high - low)+ low;” 它们都指向生成随机数的函数。麻烦的是我之前使用过这个完全相同的功能并且工作正常。我真的不知道会出现什么问题。任何帮助将不胜感激。请注意,我对C ++仍然有点新鲜。
我已经包括:cstdlib,stdio.h,cstdio,time.h,vector,iomanip,fstream,iostream,cmath。 这是我现在的代码:
int main() {
int N=20000;
std::srand((unsigned)time(0));
for(int i = 0; i<(N+1); ++i) {
double high = 1.0, low = 0.0;
rand[i]=((double) rand()/(static_cast<double>(RAND_MAX) + 1.0))*(high - low) + low;
}
return 0;
}
答案 0 :(得分:1)
您使用名称rand
作为要写入的数组和您调用的标准库函数。那很糟。
声明一个带有其他名称的数组,然后写入它。例如:
int main() {
int N=20000;
std::srand((unsigned)time(0));
std::vector<double> A(N+1);
for(int i = 0; i<(N+1); ++i) {
double high = 1.0, low = 0.0;
A[i]=((double) rand()/(static_cast<double>(RAND_MAX) + 1.0))*(high - low) + low;
}
return 0;
}
答案 1 :(得分:1)
现在是时候超越兰特了。这是一个使用C ++ 11中的功能的更现代的版本。
#include <algorithm>
#include <iterator>
#include <random>
#include <vector>
int main()
{
const int n = 20000;
std::random_device rd;
std::mt19937 e(rd()); // The random engine we are going to use
const double low = 0.0;
const double high = 1.0;
std::uniform_real_distribution<double> urng(low, high);
std::vector<double> A;
std::generate_n(std::back_inserter(A), n + 1,
[urng, &e](){ return urng(e); });
return 0;
}