- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近才开始学习 C++,所以我在调试程序时遇到了麻烦。
我想生成随机数。经过一些谷歌搜索后,似乎一种方法是按照
#include <random>
std::mt19937 rng;
std::uniform_int_distribution<int> distribution;
int main()
{
rng(std::random_device()());
distribution(0, 10);
}
但是,当我用 g++ -std=c++14 test.cpp
编译它时,我得到了这些错误:
test.cpp: In function ‘int main()’:
test.cpp:8:31: error: no match for call to ‘(std::mt19937 {aka std::mersenne_twister_engine<unsigned int, 32u, 624u, 397u, 31u, 2567483615u, 11u, 4294967295u, 7u, 2636928640u, 15u, 4022730752u, 18u, 1812433253u>}) (std::random_device::result_type)’
rng(std::random_device()());
^
In file included from /usr/include/c++/5/random:49:0,
from test.cpp:1:
/usr/include/c++/5/bits/random.h:546:7: note: candidate: std::mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::result_type std::mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::operator()() [with _UIntType = unsigned int; unsigned int __w = 32u; unsigned int __n = 624u; unsigned int __m = 397u; unsigned int __r = 31u; _UIntType __a = 2567483615u; unsigned int __u = 11u; _UIntType __d = 4294967295u; unsigned int __s = 7u; _UIntType __b = 2636928640u; unsigned int __t = 15u; _UIntType __c = 4022730752u; unsigned int __l = 18u; _UIntType __f = 1812433253u; std::mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>::result_type = unsigned int]
operator()();
^
/usr/include/c++/5/bits/random.h:546:7: note: candidate expects 0 arguments, 1 provided
test.cpp:9:23: error: no match for call to ‘(std::uniform_int_distribution<int>) (int, int)’
distribution(0, 10);
^
In file included from /usr/include/c++/5/random:49:0,
from test.cpp:1:
/usr/include/c++/5/bits/random.h:1768:2: note: candidate: template<class _UniformRandomNumberGenerator> std::uniform_int_distribution<_IntType>::result_type std::uniform_int_distribution<_IntType>::operator()(_UniformRandomNumberGenerator&) [with _UniformRandomNumberGenerator = _UniformRandomNumberGenerator; _IntType = int]
operator()(_UniformRandomNumberGenerator& __urng)
^
/usr/include/c++/5/bits/random.h:1768:2: note: template argument deduction/substitution failed:
test.cpp:9:23: note: candidate expects 1 argument, 2 provided
distribution(0, 10);
^
In file included from /usr/include/c++/5/random:49:0,
from test.cpp:1:
/usr/include/c++/5/bits/random.h:1773:2: note: candidate: template<class _UniformRandomNumberGenerator> std::uniform_int_distribution<_IntType>::result_type std::uniform_int_distribution<_IntType>::operator()(_UniformRandomNumberGenerator&, const std::uniform_int_distribution<_IntType>::param_type&) [with _UniformRandomNumberGenerator = _UniformRandomNumberGenerator; _IntType = int]
operator()(_UniformRandomNumberGenerator& __urng,
^
/usr/include/c++/5/bits/random.h:1773:2: note: template argument deduction/substitution failed:
test.cpp:9:23: note: cannot convert ‘10’ (type ‘int’) to type ‘const std::uniform_int_distribution<int>::param_type&’
distribution(0, 10);
^
我对 random_device
、mt19937
和 uniform_int_distribution
做了一些研究,根据我有限的知识,我似乎正确地使用了所有东西.我基本上还在 SO 上复制粘贴了其他答案中的代码,所以看起来代码应该可以工作。更改代码的上下文是否破坏了什么?
最佳答案
您混淆了设备、生成器和分配器的概念。尽量把每件事分开;然后它会变得简单。
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 200);
for (int n = 0; n < 10; ++n) {
std::cout << dis(gen) << ' ';
}
std::cout << '\n';
}
关于c++ - 尝试使用 random_device、mt19937 和 uniform_int_distribution 时出现大量编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429197/
我有一个包含两个随机源的类。 std::random_device rd; std::mt19937 random_engine; 我通过调用 std::random_device 为 std::mt
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我需要从不同的 C++ 随机数生成算法中获取数据,为此我创建了一些程序。其中一些使用伪随机数生成器,而另一些使用 random_device(非确定性随机数生成器)。下面的程序属于第二组: #incl
我对 c++11 随机库有点困惑。 我的理解:我们需要两个独立的概念: 随机引擎,可以是: 伪(需要种子)又名 PRNG 真正的随机数生成器 分布:它将从引擎获得的数字映射到特定的区间,使用特定的分布
是否保证 random_device 不会在每个新线程的相同内部状态下启动?那么下面的代码很可能给出两个不同的值? #include #include #include #include us
#include #include using namespace std; int main() { vector coll{1, 2, 3, 4}; shuffle(coll.
我看到很多人一起谈论安全和 std::random_device。 例如,here幻灯片 22。 根据 cppreference , std::random_device : std::random_
根据标准,std::random_device 按以下方式工作: result_type operator()(); Returns: A non-deterministic random value
典型的现代获取随机数的方法是这样的: std::random_device rd; std::mt19937 engine{rd()}; std::uniform_int_distribution<>
我有一些看起来有点像这样的代码: std::random_device rd; #pragma omp parallel { std::mt19937 gen(rd()); #prag
我试着解决这个问题: c++0x_warning.h:32: Fehler:#error This file requires compiler and library support for the
有人知道如何在 ubuntu 上安装 random_device 吗?安装了来自 repo 的所有 boost 包。 我收到的错误是: fatal error :boost/random/random
我尝试运行一个来自 cppreference 的简单示例关于std::random_device , 但在函数调用线上 d(rd1)程序进入无限循环,永不返回。 代码如下: #include #in
我正在使用 std::random_device 并想检查它的剩余熵。根据 cppreference.com: std::random_device::entropy double entropy()
我是 C++ 初学者,我对 C++0x 随机数生成器有疑问。我想使用 Mersenne twister 引擎来生成随机 int64_t 数字,并且我使用我之前找到的一些信息编写了一个函数: #incl
假设我有这个跨平台程序 #include #include int main() { std::random_device rd; std::cout dist(0, 9);
std::random_device 的拷贝构造函数被删除了,我不知道为什么。 我从 docs 中找到的唯一笔记是: 2) The copy constructor is deleted: std::
引自cppreference : std::random_device is a non-deterministic random number engine, although implementa
gcc implementation std::random_device 对我来说似乎很奇怪。具体来说,第 137 行: random_device::result_type random_
我在 Windows 中使用 g++ 和 MinGW 来编译我的 c++ 代码,它看起来像这样: std::mt19937_64 rng(std::random_device{}()); std::u
我是一名优秀的程序员,十分优秀!