gpt4 book ai didi

c++ - 无法 std::shuffle?

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:22 25 4
gpt4 key购买 nike

Code是基本的:

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

int main(int argc, const char *argv[]) {
std::vector<int> mSet = { 1, 2, 3, 4 };

auto timeSeed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
std::seed_seq ss{ uint32_t(timeSeed & 0xffffffff), uint32_t(timeSeed >> 32) };
std::mt19937_64 rng;
std::shuffle(mSet.begin(), mSet.end(), rng);

for (size_t i = 0; i < mSet.size(); i++) {
std::cout << mSet[i] << " ";
}
}

它总是向我显示相同的序列。我哪里错了?

最佳答案

当你实例化rng时,你没有使用ss。因此,您的种子不会被使用,序列将始终相同。

看起来你的意思是:

std::mt19937_64 rng{ss};

您的编译器应该警告您 ss 未被使用。您是否出于某种原因关闭了警告? 不幸的是,即使使用 -Wextra,GCC 似乎也没有对此发出警告。

关于c++ - 无法 std::shuffle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53158343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com