C++随机生成器 mt19937 中,它是在<random>还是<bits/random.h>?

C++ random generator mt19937, is it in <random> or <bits/random.h>?

本文关键字:lt random gt bits 还是 随机 mt19937 C++      更新时间:2023-10-16

我已经从这里和(更明确地)这里确认了您需要#include<random>才能使用std::mt19937,但当我在CLion中这样做时,CLion会将其标记为红色,并表明它在<bits/random.h>中。那是哪一个呢?我应该同时#include吗?但我认为扩展名为.h的头文件不推荐使用?

顺便说一句,我在CentOS Linux 7.1.1503版本上使用CLion 1.2.1和GCC 4.8.3。

它是<random>

<bits/random.h>是GCC特定的实现。仅包括<random>

CLion通过搜索实际定义的遗漏类来实现这一点,对于GCC,它是<bits/random.h>,这就是它建议包含它的原因。这不是正式的错误,但这是非跨平台的,甚至是非交叉编译器的。

您应该升级GCC(2015年11月的当前版本是GCC 5.2,它对C++11的支持要好得多),并将其调用为g++ -std=c++11(也可以使用-Wall -Wextra -g来获取所有警告、更多警告和调试信息),然后当然使用#include <random>,如本文所述。

(升级到GCC 5.2可以通过从下载的源代码中编译来完成;如果需要,可以问一些其他问题)

如果您只是直接#include <bits/random.h>,它是特定于实现的(永远不要为自己包含bits/*.h内部标头),并且IIRC会出现错误(或者至少是严重警告)。

你不需要使用Clion。编译器是GCC。