के लिए आरएनजी के रूप में यादृच्छिक मेरे पास एक प्रोग्राम है जो boost :: random से mt19937 यादृच्छिक संख्या जनरेटर का उपयोग करता है। मुझे एक random_shuffle करने की आवश्यकता है और इस साझा स्थिति से होने के लिए यादृच्छिक संख्याएं उत्पन्न होनी चाहिए ताकि वे मेर्सन ट्विस्टर के पहले जेनरेट किए गए नंबरों के संबंध में निर्धारिती हो सकें।बूस्ट का उपयोग करना :: std :: random_shuffle
मैं कुछ इस तरह की कोशिश की:
void foo(std::vector<unsigned> &vec, boost::mt19937 &state)
{
struct bar {
boost::mt19937 &_state;
unsigned operator()(unsigned i) {
boost::uniform_int<> rng(0, i - 1);
return rng(_state);
}
bar(boost::mt19937 &state) : _state(state) {}
} rand(state);
std::random_shuffle(vec.begin(), vec.end(), rand);
}
लेकिन मैं एक टेम्पलेट त्रुटि रैंड साथ random_shuffle बुला मिलता है। हालांकि यह काम करता है:
unsigned bar(unsigned i)
{
boost::mt19937 no_state;
boost::uniform_int<> rng(0, i - 1);
return rng(no_state);
}
void foo(std::vector<unsigned> &vec, boost::mt19937 &state)
{
std::random_shuffle(vec.begin(), vec.end(), bar);
}
शायद क्योंकि यह वास्तविक कार्य कॉल है। लेकिन जाहिर है यह राज्य को मूल मेर्सन ट्विस्टर से नहीं रखता है। क्या देता है? क्या वैश्विक वैरिएबल के बिना मैं क्या करने की कोशिश कर रहा हूं?
एक बार जब आप इसे बाहर का परीक्षण, आपने सही कोड पोस्ट करें सकता है , वंशावली के लिए? धन्यवाद –
ग्रेग: मैंने आपके परिवर्तन को वापस कर दिया है। यदि आप मार्कडाउन कोड ब्लॉक (इंडेंट प्रत्येक पंक्ति 4 रिक्त स्थान) का उपयोग करने के इच्छुक हैं, तो आपको अपने कोड में HTML वर्णों से बचने की ज़रूरत नहीं है। –
बस कोड को हाइलाइट करें, और "010 101" बटन पर क्लिक करें। –