大佬教程收集整理的这篇文章主要介绍了使用随机生成功能时打印的同一组数字,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个代码可以打印 5x5 随机数矩阵 10 次。我使用了 mt19937 生成器。问题是每次主循环迭代时它都会打印相同的 25 个随机数集(int S)。我怎样才能让它随机?
std::random_device device;
std::mt19937 generator(device());
std::uniform_int_distribution<int> distribution(1,10100);
for (int S = 0; S < 10; S++)
{
for (int i = 0; i < numberOfBlocks; i++)
{
for (size_t i = 0; i < dataBitsPerBlock; ++i)
{
inputDataBits[i] = distribution(generator) % 2; //generates input data stream
}
blockData.push_back(inputDataBits);
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cout << blockData[i][j];
}
cout << endl;
}
cout << endl<< endl;
}
生成随机数据没有任何问题。唯一的问题是用于测试它的代码。最外层循环运行 10 次,您期望有 10 个不同的块,但块创建逻辑只有 push_back
行,因此您实际上将下一个块附加到第一个块下,并再次打印第一个块本身。您只需要在打印后在 clear()
上调用 blockData
。
为了更好地理解,我在这里给出了完整的代码:
#include <iostream>
#include <vector>
#include <random>
using namespace std;
int main() {
std::random_device device;
std::mt19937 generator(device());
std::uniform_int_distribution<int> distribution(1,10100);
int numberOfBlocks = 5;
const int dataBitsPerBlock = 5;
std::vector<int> inputDataBits(dataBitsPerBlock);
std::vector<std::vector<int>> blockData;
for (int S = 0; S < 10; S++)
{
for (int i = 0; i < numberOfBlocks; i++)
{
for (size_t i = 0; i < dataBitsPerBlock; ++i)
{
inputDataBits[i] = distribution(generator) % 2; //generates input data stream
}
blockData.push_back(inputDataBits);
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
std::cout << blockData[i][j];
}
std::cout << endl;
}
blockData.clear(); // This is the solution.
std::cout << endl << endl;
}
return 0;
}
以上是大佬教程为你收集整理的使用随机生成功能时打印的同一组数字全部内容,希望文章能够帮你解决使用随机生成功能时打印的同一组数字所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。