在C++17中,
std::random_shuffle()
已被废弃,而改用
std::shuffle()
函数。
std::shuffle()
函数用于将给定范围内的元素随机重排。它采用一个随机数生成器(例如
std::default_random_engine
)来产生随机数,然后使用 Fisher-Yates 洗牌算法(也称为 Knuth 洗牌算法)来随机重排元素。
std::shuffle()
函数的语法如下:
template< class RandomIt, class URBG >
void shuffle( RandomIt first, RandomIt last, URBG&& g );
其中,first
和last
分别表示需要重排的元素范围的起始和终止位置,g
表示随机数生成器。
下面是一个简单的例子,展示了如何使用std::shuffle()
函数将一个整数向量中的元素随机重排:
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
int main() {
std::vector<int> nums{1, 2, 3, 4, 5};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(nums.begin(), nums.end(), g);
for (auto num : nums) {
std::cout << num << " ";
return 0;
上述代码中,首先创建了一个整数向量nums
,然后创建了一个std::mt19937
类型的随机数生成器g
。最后,使用std::shuffle()
函数将nums
中的元素随机重排,并使用循环输出了重排后的结果。
需要注意的是,C++17中std::random_shuffle()
函数已被废弃,如果需要在C++17及以上版本中随机重排元素,请使用std::shuffle()
函数。