我想用随机或伪随机字节的数据填充std::vector<BYTE>
。我已经在stackoverflow中编写了(换句话说,找到它)以下源代码,但它不能在我的Visual Studio中编译。
#include <Windows.h>
#include <vector>
#include <random>
#include <climits>
#include <algorithm>
#include <functional>
using random_bytes_engine = std::independent_bits_engine<std::default_random_engine, CHAR_BIT, BYTE>;
int main()
{
random_bytes_engine rbe;
std::vector<BYTE> data(1000);
std::generate(data.begin(), data.end(), std::ref(rbe));
}
当我尝试编译上述代码Visual Studio给予我以下错误:
错误C2338注解:不允许字符、有符号字符、无符号字符、char8_t、int8_t和uint8_t消息传递
错误C2338 independent_bits_engine的模板参数无效:N4659 29.6.1.1 [兰德.req.genl]/1f需要无符号短整型、无符号整型、无符号长整型或无符号长整型消息之一。
3条答案
按热度按时间rsaldnfx1#
的
UIntType
参数不允许使用BYTE
类型,该类型只是unsigned char
的别名标准[兰德.req.genl]/1.f规定:
在整个子条款[兰德]中,示例化模板的效果是:
...
UIntType
的模板类型参数的模板参数是未定义的,除非对应的模板参数是cv非限定的并且是unsigned short
、unsigned int
、unsigned long
或unsigned long long
之一。w6lpcovy2#
Evg的答案是正确的。
如果你真的只想使用随机字节,我会使用一个自定义生成器函数,它可以生成[-128,127]或任何所需范围内的值。
参考文献:
xqk2d5yq3#
只需执行以下操作即可:
将引擎转换为一个32位随机数生成器,但使用它来初始化字节向量工作得很好。