std::random_shuffle
是 C++98 中的一個函數,用于對序列進行隨機排序
std::shuffle
:C++11 引入了 std::shuffle
,它接受一個隨機數生成器作為參數。這樣可以提高性能,因為隨機數生成器可以更有效地生成隨機數。#include<random>
#include<algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
}
std::random_shuffle
的功能。#include<random>
#include<algorithm>
template<class It>
void random_shuffle(It begin, It end) {
std::random_device rd;
std::mt19937 g(rd());
for (auto it = begin + 1; it != end; ++it) {
std::uniform_int_distribution<> dis(0, std::distance(begin, it));
std::iter_swap(it, begin + dis(g));
}
}
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
random_shuffle(v.begin(), v.end());
}
優化隨機數生成器:在上述示例中,我們使用了 std::mt19937
作為隨機數生成器。你可以根據需要選擇其他隨機數生成器,如 std::linear_congruential_engine
或 std::knuth_b
。
避免不必要的復制:當處理大型容器時,盡量避免不必要的復制操作。例如,你可以使用 std::move_iterator
將元素移動到新位置,而不是復制它們。
并行化:如果你的硬件支持多線程,可以考慮使用并行算法來加速隨機排序過程。C++17 引入了并行算法庫,其中包括 std::shuffle
的并行版本。
請注意,這些優化方法可能會因編譯器、硬件和問題規模的不同而產生不同的效果。在實際應用中,建議根據具體情況進行性能測試和調優。