【问题标题】:How to store the state of boost random number generator as const char *?如何将 boost 随机数生成器的状态存储为 const char *?
【发布时间】:2014-01-29 21:14:17
【问题描述】:

我很难弄清楚如何创建生成器内部状态的内存缓冲区以用于 c 样式代码。我无法存储对象,因此我需要在编译时知道生成器状态的大小。除了这个 boost random header 之外,我不能使用任何与 boost 相关的东西。我必须坚持使用 stl 的东西。我尝试使用字符串流,但它在遇到空字符后停止。如果我必须编写一个自定义流缓冲区,它需要在下面的函数中内联,我只是不知道该怎么做。我的目标是将随机数生成器状态存储在 c 结构中的恒定大小的内存块中。我发现的最简单的解决方案是将 boost 替换为 mersenne twister 算法的 c 实现,该算法具有易于识别的数组大小。

static boost::mt19937 rngEngine;
static boost::variate_generator<boost::mt19937&, boost::uniform_int<> > generator(rngEngine, boost::uniform_int<>(0, INT_MAX));

const char * getState(void) {
    std::ostringstream content;
    content << rngEngine;
    return content.str().data();
}

【问题讨论】:

    标签: c++ c boost random stream


    【解决方案1】:

    从您的getState 函数返回一个std::string,它将具有size(或C++03 中的length)并嵌入'\0' 字符。

    所写的代码是未定义的行为,因为const char* 比产生它的字符串的寿命更长。

    【讨论】:

    • 我的理解是,字符串流在遇到空字符时立即停止。显然不是。
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2011-08-25
    • 2011-01-16
    • 2013-10-30
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多