C++的random_shuffle函數(shù)是可以通過提供自定義的隨機(jī)數(shù)生成器來定制的。在C++11及以上的標(biāo)準(zhǔn)中,random_shuffle函數(shù)接受一個可調(diào)用對象作為第三個參數(shù),該對象將被用作隨機(jī)數(shù)生成器。你可以使用標(biāo)準(zhǔn)庫中的隨機(jī)數(shù)引擎類(如std::default_random_engine)或者編寫自己的隨機(jī)數(shù)生成器類,并將其傳遞給random_shuffle函數(shù)來定制隨機(jī)數(shù)生成過程。
以下是一個使用自定義隨機(jī)數(shù)生成器的示例:
#include <iostream>
#include <algorithm>
#include <random>
// 自定義隨機(jī)數(shù)生成器類
class CustomRandomGenerator {
public:
CustomRandomGenerator(int seed) : mt(seed) {}
size_t operator()(size_t n) {
std::uniform_int_distribution<int> dist(0, n-1);
return dist(mt);
}
private:
std::mt19937 mt; // Mersenne Twister隨機(jī)數(shù)引擎
};
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
CustomRandomGenerator rng(123); // 使用seed為123的自定義隨機(jī)數(shù)生成器
std::random_shuffle(vec.begin(), vec.end(), rng);
for (int i : vec) {
std::cout << i << " ";
}
return 0;
}
在這個示例中,我們定義了一個CustomRandomGenerator類,它接受一個種子作為參數(shù)并使用Mersenne Twister隨機(jī)數(shù)引擎生成隨機(jī)數(shù)。然后我們創(chuàng)建了一個CustomRandomGenerator對象rng,并將其傳遞給random_shuffle函數(shù),以使用我們自定義的隨機(jī)數(shù)生成器來對vec進(jìn)行隨機(jī)打亂。最后打印出打亂后的vec內(nèi)容。
通過這種方式,你可以定制random_shuffle函數(shù)的隨機(jī)數(shù)生成過程,以滿足特定的需求或應(yīng)用場景。