推荐使用std::shuffle打乱数组,需包含和头文件,结合std::mt19937随机数生成器,提供高质量随机性,适用于数组和vector,避免使用已弃用的std::random_shuffle。

在C++中打乱数组顺序,推荐使用标准库中的 std::shuffle 函数,它是现代、安全且高效的方法。相比旧的随机方式(如 std::random_shuffle,已被弃用),std::shuffle 需要传入一个随机数生成器,提供了更好的随机性。
使用 std::shuffle 打乱数组
步骤如下:
- 包含头文件:
gorithm> 和 - 定义一个随机数生成器(如 std::mt19937)
- 调用 std::shuffle,传入数组的起始和结束迭代器,以及生成器
#include#include #include int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); // 创建随机数生成器,使用随机种子 std::random_device rd; std::mt19937 gen(rd()); // 打乱数组 std::shuffle(std::begin(arr), std::end(arr), gen); // 输出结果 for (int i = 0; i < n; ++i) { std::cout << arr[i] << " "; } return 0; }
对 std::vector 打乱顺序
如果使用动态数组(如 vector),方法几乎一样:
#include#include #include std::vector vec = {10, 20, 30, 40, 50}; std::random_device rd; std::mt19937 g(rd()); std::shuffle(vec.begin(), vec.end(), g);
注意事项
避免使用已弃用的 std::random_shuffle,它依赖于全局 rand(),随机性差且不安全。使用 std::shuffle + std::mt19937 可以获得高质量的随机排列。
立即学习“C++免费学习笔记(深入)”;
确保每次运行程序时种子不同,建议用 std::random_device 初始化 mt19937。若需可重复结果,可固定种子,如 std::mt19937 gen(42);
基本上就这些,方法简单又可靠。











