C++ 程序在代码块 IDE 中不起作用
c++ program not working in code block IDE
我有一个简单的C++程序来生成均匀的分布式随机数,该程序在Visual Studio中工作正常。 但是当我在代码块 IDE 中运行它时,我得到重复的随机数,我该如何解决这个请求?
#include <random>
#include <functional>
#include <ctime>
#include<iostream>
using namespace std;
double Rand()
{
random_device seeder;
const auto seed = seeder.entropy() ? seeder() : time(nullptr);
mt19937 eng(static_cast<mt19937::result_type>(seed));
uniform_real_distribution<double> dist(0, 1);
auto gen = bind(dist, eng);
return gen();
}
int main()
{
srand((unsigned)time(0));
for (unsigned int i = 0; i < 10; ++i)
cout<<Rand()<<endl;
return 0;
}
您可以像这样重写Rand()
函数:
double Rand()
{
static random_device seeder;
static mt19937 eng(seeder());
uniform_real_distribution<double> dist(0, 1);
return dist(eng);
}
这是一个演示。
代码有几个问题。
首先,它根据.entropy()
的值决定是否应使用std::random_device
。
我不确定它是否正确检测到GCC-9.2 MinGW之前的损坏random_device
(每次运行程序时都会返回相同的数字序列(,而且我手上没有旧的MinGW来检查。但无论如何,根据 cpp 偏好,它会错误地决定避免在 libc++ 上random_device
,.entropy()
总是返回0
.
我的建议是无条件地使用std::random_device
。如果你有一个旧的 MinGW 坏了,更新编译器。
第二个问题是每次调用函数时它都会重新创建mt19937 eng
,这没有多大意义。可能应该是static
.如果代码使用基于时间的种子设定(.entropy()
恰好返回 0(,那么它可能会给你相同的数字,因为该函数被调用多次而没有延迟;否则它只是效率低下。
这是固定代码:
#include <iostream>
#include <random>
double Rand()
{
static std::mt19937 eng(std::random_device{}());
std::uniform_real_distribution<double> dist(0, 1);
return dist(eng);
}
int main()
{
for (int i = 0; i < 10; ++i)
std::cout << Rand() << std::endl;
}
我还删除了完全不必要的std::bind
调用和std::srand
调用,由于您不使用std::rand
,因此没有执行任何操作。
如果这个程序每次运行它时都给你相同的数字,这可能意味着你有一个旧的MinGW,random_device
坏了。然后更新编译器。(MSYS2 是在 Windows 上获得前沿 GCC 的好方法。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- C++ 程序在代码块 IDE 中不起作用
- 程序在CLion IDE中工作,但exe不起作用