这个函数可以随机重新排列容器中的元素。它通过调用一个随机数生成器来产生随机的索引,然后对元素进行交换,从而实现随机排列。
shuffle
与random_shuffle不同,shuffle函数允许开发者提供自定义的随机数生成器。这意味着可以使用不同的随机数生成器来实现不同的随机化效果。
1.3函数原型
下面是random_shuffle和shuffle的函数原型:
template <class RandomIt>
void random_shuffle(RandomIt first, RandomIt last);
template <class RandomIt, class RandomFunc>
void shuffle(RandomIt first, RandomIt last, RandomFunc&& r);
RandomIt是一个迭代器类型,用于标识容器中的元素范围;
first和last参数指定了要打乱的元素范围,包括first但不包括last;
RandomFunc是一个函数对象类型,用于生成随机数。
1.4示例代码
下面提供四个示例代码,两个使用random_shuffle,两个使用shuffle。
使用random_shuffle打乱容器中的元素。
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 使用默认的随机数生成器进行打乱
std::random_shuffle(numbers.begin(), numbers.end());
// 输出打乱后的结果
std::cout << "Random shuffle: ";
for (const auto& num : numbers) {
std::cout << num << " ";
std::cout << std::endl;
return 0;
std::string str = "Hello, World!";
// 使用默认的随机数生成器进行打乱
std::random_shuffle(str.begin(), str.end());
// 输出打乱后的结果
std::cout << "Random shuffle: " << str << std::endl;
return 0;
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 使用自定义的随机数生成器进行打乱
std::random_device rd;
std::mt19937 g(rd()); // 使用 Mersenne Twister 随机数引擎
std::shuffle(numbers.begin(), numbers.end(), g);
// 输出打乱后的结果
std::cout << "Custom shuffle: ";
for (const auto& num : numbers) {
std::cout << num << " ";
std::cout << std::endl;
return 0;
// 使用自定义的随机数生成器进行打乱
std::random_device rd;
std::mt19937 g(rd()); // 使用 Mersenne Twister 随机数引擎
std::shuffle(str.begin(), str.end(), g);
// 输出打乱后的结果
std::cout << "Custom shuffle: " << str << std::endl;
return 0;