मुझे आश्चर्य है कि यह प्रोग्राम की शुरुआत में केवल एक बार यादृच्छिक संख्या जनरेटर के लिए पर्याप्त है। मैं ऐसे कार्य लिखता हूं जो यादृच्छिक संख्याओं का उपयोग करते हैं। मैं फ़ंक्शन के भीतर रैंड() जनरेटर को कभी बीज नहीं देता, बल्कि मुख्य प्रविष्टि पर srand() को कॉल करना छोड़ देता हूं। जैसे मेरा प्रोग्राम इस तरह दिख सकता है:मुझे सी ++ में कितनी बार शोध किया जाना चाहिए?
void func1()
{
std::cout << "This is func1 " << std::rand() << std::endl;
}
void func2()
{
std::cout << "This is func2 " << std::rand() << std::endl;
}
int main()
{
std::srand(std::time(NULL));
func1();
func2();
return 0;
}
ऐसा करके, मैं आसानी से मुख्य प्रविष्टि से बीजिंग बंद कर सकता हूं। जब प्रोग्राम को डिबग करना होता है तो यह उपयोगी होता है - जब भी मैं बीजिंग के बिना प्रोग्राम चलाता हूं तो परिणाम समान होते हैं। कभी-कभी, अगर कुछ यादृच्छिक संख्या के कारण कोई समस्या उत्पन्न होती है, तो यह यादृच्छिक संख्याओं का एक अलग सेट उत्पन्न होने पर गायब हो सकता है, इसलिए मैं बीजिंग को बंद करने के लिए इस तरह के एक सरल तंत्र को पसंद करूंगा।
हालांकि, मैंने सी ++ 11 के नए यादृच्छिक उपयोगिता सेट में देखा, यादृच्छिक संख्या जेनरेटर को उपयोग करने से पहले तत्काल होना चाहिए। (उदा। डिफ़ॉल्ट_random_engine)। और हर बार एक जनरेटर को अलग से बीज किया जाना चाहिए। मुझे आश्चर्य है कि जब भी एक नया जनरेटर की आवश्यकता होती है तो जनरेटर को संशोधित करने के लिए वास्तव में प्रोत्साहित किया जाता है। मुझे पता है कि मैं एक वैश्विक यादृच्छिक जनरेटर बना सकता हूं और बीज को केवल एक बार पहले ही बना सकता हूं, लेकिन मुझे वास्तव में वैश्विक चर का उपयोग करने का विचार पसंद नहीं है। अन्यथा, यदि मैं एक स्थानीय यादृच्छिक संख्या जनरेटर बनाता हूं, तो मैं डीबगिंग या जो भी उद्देश्य के लिए बीजिंग को वैश्विक रूप से बंद करने की क्षमता खो देता हूं।
मैं सी ++ 11 में नई सुविधाओं को जानने के लिए उत्साहित हूं, लेकिन कभी-कभी यह बहुत भ्रमित है। क्या मुझे कोई नया यादृच्छिक जेनरेटर के साथ कुछ गलत होने पर मुझे बता सकता है? या सी ++ 11 में सबसे अच्छा अभ्यास क्या हो सकता है?
एक वैश्विक बीज फ़ंक्शन है जो वर्तमान समय या (डीबग मोड में) स्थिर करता है। –