सी ++ 11 से पहले, मैंने से rand()
का उपयोग किया था और main()
फ़ंक्शन (उदाहरण के लिए) में जनरेटर को बीज (या नहीं) चुनना बहुत आसान था, फिर पुस्तकालय में उपयोग करें लाइब्रेरी में कहीं फ़ंक्शन द्वारा उत्पन्न यादृच्छिक संख्या । कोड इस तरह देखा:सी ++ 11 में यादृच्छिक संख्या: क्या कोड के एक स्थान पर जनरेटर को बीज करने का एक आसान तरीका है, फिर इसे विभिन्न कार्यों में उपयोग करें?
LibraryB (यादृच्छिक संख्या, पुराने तरीके से उत्पन्न करता है):
#include <cstdlib> // rand, RAND_MAX
double GetRandDoubleBetween0And1() {
return ((double)rand())/((double)RAND_MAX);
}
मुख्य कार्यक्रम:
#include <cstdlib> // srand
#include <ctime> // time, clock
int main() {
bool iWantToSeed = true; // or false,
// decide HERE, applies everywhere!
if(iWantToSeed){
srand((unsigned)time(0) + (unsigned int)clock());
}
// (...)
}
LibraryA (LibraryB से यादृच्छिक संख्या का उपयोग करता है, के अनुसार उत्पन्न बीज main()
में दी गई):
#include "../folderOfLibraryB/Utils_random.h" // GetRandDoubleBetween0And1
void UseSomeRandomness(){
for(int i = 0; i < 1000000; i++){
double nb = GetRandDoubleBetween0And1();
// (...)
}
}
आसान, है ना?
अब मैं #include <random>
के माध्यम से उपलब्ध C++ 11 मानकों का उपयोग करके GetRandDoubleBetween0And1()
अपडेट करना चाहता हूं। मैंने पहले से ही here और there उदाहरण पढ़ और देखे हैं, लेकिन मुझे नहीं लगता कि इसे मेरे तीन मॉड्यूल में कैसे अनुकूलित किया जाए। निश्चित रूप से, GetRandDoubleBetween0And1()
अंदर इंजन बोने ऐसा करना सही नहीं है ...
क्या आपको लगता है मैं main()
से वरीयता प्राप्त इंजन UseSomeRandomness()
को LibraryA में, तो UseSomeRandomness()
से GetRandDoubleBetween0And1()
को LibraryB में पारित करने के लिए करना होगा? या क्या कोई आसान तरीका है?
क्या एक अपने मौजूदा कोड के लिए बुरी खबर! – Georg