rand()?vector、陣列)。std::random_shuffle 重新排列元素順序。vector 整數隨機排列
#include
#include
#include
int main() {
std::vector vi;
for (int i = 0; i < 100; ++i) vi.push_back(i); // 0~99 有序填充
std::random_shuffle(vi.begin(), vi.end()); // 打亂順序
for (int i = 0; i < 100; ++i) std::cout << vi[i] << ' ';
}
random_shuffle 定義於 <algorithm>,參數為迭代器範圍 [first, last)。
#include
#include
#include
#include
int main() {
std::vector vs = {"Sunday","Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday"};
std::random_shuffle(vs.begin(), vs.end());
for (const auto& s : vs) std::cout << s << '\n';
}
char carr[4] = {'a','b','c','d'};
std::random_shuffle(carr, carr+4); // 指標即迭代器,carr+4 指向尾後
for (int i = 0; i < 4; ++i) std::cout << carr[i] << ' ';
vector 初始化 52 張牌 → random_shuffle。random_shuffle 預設使用 rand(),非密碼學安全。需安全隨機請用 std::shuffle + std::random_device/std::mt19937(C++11)。
// C++11 起推薦使用 shuffle + 隨機引擎
#include
#include
std::mt19937 rng(std::random_device{}());
std::shuffle(vi.begin(), vi.end(), rng); // 更好的隨機品質、可重現種子
random_shuffle 在 C++14 棄用,C++17 移除。新專案請直接使用 std::shuffle。
random_shuffle(及其繼任者 shuffle)以打亂有序序列的巧妙思路,解決了傳統隨機數生成的分布失真與型別侷限問題。其泛型設計支援任意可變更序列容器與元素型別,是 C++ 標準庫中極具實用價值的算法之一。