本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

1.2random_shuffle和shuffle的区别

random_shuffle

这个函数可以随机重新排列容器中的元素。它通过调用一个随机数生成器来产生随机的索引,然后对元素进行交换,从而实现随机排列。

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;