日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

不一样的随机数生成方法(C/C++)

發布時間:2025/4/16 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不一样的随机数生成方法(C/C++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在網上查隨機數生成,大家基本都是大同小異的,而且還不是很方便(這個如果你只是想要生成一個隨機數什么的,那也無所謂,還能湊合著用那種方法)。

用C++寫的,但是C要用就把 ctime寫成time.h ,cstdlib寫成stdlib.h
C++的隨機數生成本質上是用C的庫實現的,你看庫名字就知道了…

但是不夠好的是,如果如果我要生成多個隨機數的時候,那么我就要設置一個種子,srand,一般呢,就是用時間去波動它。導致時序不同的地方生成一個的隨機數。
一般代碼如下:(熟手的話,很容易就打完下面的代碼了)

#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int RandNumber(int begin = 0, int end = 1) {return (rand()%(end-begin+1))+begin; } int main(){srand(time(0));for (int i = 0; i < 10; ++i){cout << RandNumber(1,5)<<endl;}return 0; }

但是仔細看的話,發現這樣其實是不夠好的
這個不夠好,是在代碼格式上的。
要是進行一個大的規模的的程序。你放一個種子在main函數或者其他什么函數中,這樣肯定是不好的嘛!(在邏輯上過不去,打碼久了就能很容易體會到這一點)
這樣封裝起來就不夠嚴密了嘛。
所以呢?好的解決方法是什么呢?
我想到了一個,就是構建一個類。
為什么要構建類呢?
對于每一個類,都可以在構造函數中構建一次隨機數種子。
這樣,由于一個隨機數種子會對應一個隨機數。再由于時間在波動,所以,就可以更新隨機數。
同樣可以增加代碼的重用。可以說是一個非常好的程序員思維。
舉個反例,一般對隨機數不太熟的人都會遇到生成的隨機數是相等的
典型錯誤就包括下面這種(下面代碼確保了重用但是…)

#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int RandNumber(int begin = 0, int end = 1) {srand(time(0));return (rand()%(end-begin+1))+begin; } int main(){for (int i = 0; i < 10; ++i){cout << RandNumber(1,5)<<endl;}return 0; }

雖然你確實生成了一個隨機數,但是不得不說的是,你每次生成的隨機數都是一樣的…
像上面那個代碼運行的結果,每次都可能是1到5之間的任意的一個數,但輸出的這個10個數都是一樣的…對比第一代碼,可以看出srand的位置的不同(雖然長得有點像)

但是用類就沒有這方面的考慮了。

#include <iostream> #include <ctime> #include <cstdlib> using namespace std; class RandomNumber{ public:RandomNumber(){srand(time(0));}int get(int begin = 0, int end = 1){return rand()%(end-begin+1)+begin;} }; int main(){RandomNumber r,t;for (int i = 0; i < 10; ++i) {cout << r.get(1, 5)<<" "<< t.get(1, 5)<< endl;} }

為了確保自己設計沒有問題,我還特意寫了兩個變量來運行。
這樣說可以做了一個重用的隨機數了。
(而我這個代碼,就有點生成器的味道了(接觸過Python的朋友應該能感受到))
要是有小哥哥愿意做一個輸入流,這樣就可以做一個很酷的像int一樣的類,直接cout,可以說是非常酷了。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的不一样的随机数生成方法(C/C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。