要保证std::shuffle返回唯一序列,可以使用一个自定义的随机数生成器来作为std::shuffle的参数。以下是一个示例代码:
#include
#include
#include
#include
// 自定义的随机数生成器,继承自std::random_device
class MyRandomDevice : public std::random_device {
public:
MyRandomDevice() : std::random_device() {}
// 重写operator()函数,返回随机数
int operator()() {
return std::random_device::operator()();
}
};
int main() {
std::vector nums = {1, 2, 3, 4, 5};
// 使用自定义的随机数生成器
MyRandomDevice myRandomDevice;
std::shuffle(nums.begin(), nums.end(), myRandomDevice);
for (const auto& num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在上述代码中,我们定义了一个继承自std::random_device的自定义随机数生成器MyRandomDevice。重写了operator()函数,以返回随机数。
在main函数中,我们使用了自定义的随机数生成器myRandomDevice作为std::shuffle的第三个参数。这样可以保证每次运行std::shuffle时都使用不同的随机数序列,从而得到不同的打乱结果。
上一篇:保证输出正确的小数位数
下一篇:保证随机插入