[英]How to make a member function of a class in C++ generate a different random number each time it is called?
[英]Random function each time called in c++
我是C ++的新手,只用了幾個小時。
我想創建一個函數,使用一個介於1到255之間的隨機值(對於隨機IP地址)填充一個數組/向量。
我創建了這個:
vector<int> gen_ip_tuple(){
int sh_rand;
vector<int> vect_tuple;
srand(time(NULL)); // initialize random seed
for (int i = 0; i < 4; i++){
sh_rand = rand() % 255 + 1; // between 1 to 255
cout << sh_rand << endl;
vect_tuple.push_back(sh_rand);
}
return vect_tuple;
}
如果被調用一次,它將很好地工作。
但是,如果我多次調用此函數,則每次都會產生相同的4元組結果。
我不明白,因為我使用srand(time(NULL))
擁有隨機種子。
該種子是在函數中設置的,因此每次都必須是新的。
綜上所述:
每次程序重新運行時,四元組都是隨機的(與之前的運行不同)
first run = {67,127,115,45} second run ={157,142,16,93}
每次調用該函數時,都會產生相同的結果。
first call = {157,142,16,93} second call ={157,142,16,93} ....
你有什么主意嗎?
“ srand(time(NULL))具有隨機種子” <-僅在time(NULL)
值更改時才提供不同的種子,這種更改僅每秒發生一次。 如果秒內調用函數4次,則會得到四個相同的結果集。
您應該將srand()
設置從gen_ip_tuple
,可能移至main()
函數中。 並不打算讓程序的不同部分繼續調用srand()
。
我更改srand(time(NULL)); srand(time(NULL)+ rand()); 它運作良好。 多謝你們。 -@ user1778354
隨着隨機性的發展,這是一種嚴重破壞的方法。 它會使rand()
否則不能重復的時期無效(在流行平台上為2 ^ 32),因此time(NULL) + rand()
會更早地評估已使用的srand()
種子。 即使rand()
和加密哈希一樣隨機-而且距離它還很遠-風險將按照“生日問題”進行,請參閱http://preshing.com/20110504/hash-collision-probabilities/-即〜 25000個通話后10%,50000個通話后50%,150000個通話后90%。
我不知道您的程序將調用gen_ip_tuple
多少次,或者您有多嚴重需要隨機調用它,但是您的方法沒有好處,也沒有嚴重的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.