用随机数填充向量

时间:2014-03-10 01:21:57

标签: c++ random

我将直接进入:我的教授给了我一段代码,它应该生成随机数,我的编译器(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;
}

2 个答案:

答案 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;
}