我正在尝试在5个整数的数组中显示一个随机数。我有一个从0到数组大小的int分布。但每当我输出数字时,有时我会得到一个垃圾值。为什么会这样?
#include <iostream>
#include <random>
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
std::random_device seed;
std::default_random_engine rand(seed());
std::uniform_int_distribution<int> dist(0, sizeof(a)/sizeof(*a));
for (int i = 0; i < 100; ++i)
std::cout << a[dist(rand)] << "\n";
}
答案 0 :(得分:2)
数组索引从零开始。对于包含5个元素的数组,有效索引为0..4
。您的分配返回0..5
范围内的值,并且是问题的根源。
答案 1 :(得分:-2)
由于未定义的行为 - 您正在访问数组a
范围之外的元素。由于在 0
之前分布从X
到0
而不是X
到一个,您应该像这样构建它。
std::uniform_int_distribution<int> dist(0, sizeof(a)/sizeof(*a) - 1);