android - 跨平台随机再现性

标签 android c++ ios windows random

我需要使用随机函数,但还要让它在不同的设备(PC/iOS/Android)上重复。 我正在运行此示例代码,以随机播放 vector :

#include <algorithm>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>

int main() {
    std::mt19937 generator(1337);
    std::cout << "Your seed produced: " << generator() << std::endl;
    std::vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::shuffle(v.begin(), v.end(), generator);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
    return 0;
}

来自两台不同PC(windows)的输出:

Your seed produced: 1125387415
10 6 8 1 7 2 4 3 5 9

iOS 的输出:

Your seed produced: 1125387415
9 1 4 6 7 8 5 3 10 2

为什么我得到不同的结果? 是否存在与操作系统本身相关的其他依赖项? 如何让它跨平台工作?

最佳答案

std::mt19937 是严格的 defined by the standard并且没有平台特定/实现定义行为的空间,您的问题不在这里。

问题出在 std::shuffle 上,这绝不是 says how它应该使用随机数生成器,只是必须使用它。

不幸的是,如果您想要可重现的洗牌行为,您可能需要 implement your own .

关于android - 跨平台随机再现性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929085/

相关文章:

android - 以编程方式设置 RadioGroup

android - com.squareup.okhttp.HttpResponseCache无法解析符号 'HttpResponseCache'

c++ - 不是非静态数据成员或基类

c++ - 在 Raspberry Pi 2 上使用 TBB 编译 OpenCV

android - 在多列中显示重复项

android - 项目在 Android Studio 预览中显得更大?

c++ - 对象 cout 如何打印多个参数?

ios - 将对象添加到自定义 UITableViewCell

iphone - 防止移动 safari 上的水平滚动,overflow-x :hidden breaks site

ios - 如何在 AlamofireXMLRPC 请求上设置 HTTP header 字段?