簡(jiǎn)介
之前,C++中的隨機(jī)數(shù)生成都依賴(lài)于一個(gè)簡(jiǎn)單的rand函數(shù)。這個(gè)函數(shù)產(chǎn)生一定范圍內(nèi)的一個(gè)均勻隨機(jī)整數(shù)。如果需要其他隨機(jī)分布或者其他范圍的隨機(jī)數(shù),就需要根據(jù)rand函數(shù)產(chǎn)生的隨機(jī)數(shù)進(jìn)行再加工,不過(guò)這時(shí),就容易引入非隨機(jī)性了。
C++11新標(biāo)準(zhǔn)中引入了一個(gè)新的隨機(jī)數(shù)庫(kù),相關(guān)功能定義在random頭文件中,通過(guò)多個(gè)互相協(xié)作的類(lèi),可以生成任意范圍內(nèi)、服從多種隨機(jī)分布的隨機(jī)數(shù)。
隨機(jī)引擎
新的隨機(jī)數(shù)庫(kù)中引入了隨機(jī)引擎的概念。一個(gè)隨機(jī)引擎將產(chǎn)生一組 原始的 隨機(jī)數(shù)列,一般這些 原始的 隨機(jī)數(shù)不能直接使用,要配合隨機(jī)分布類(lèi)產(chǎn)生符合某分布的隨機(jī)數(shù)后才能進(jìn)行使用。
一般,最常用的隨機(jī)引擎是default_random_engine。
std::cout<<"test default random engine:\n";std::default_random_engine e;e.seed(time(0));for(size_t i = 0; i < 10; i++)std::cout<<e()<<'\t';std::cout<<'\n';std::cout<<"test default random engine done.\n"<<std::endl;
隨機(jī)分布
可以用uniform_int_distribution和隨機(jī)引擎配合來(lái)產(chǎn)生均勻分布的隨機(jī)