के सूचकांक के अंदर रखने के लिए मॉड्यूलस ऑपरेटर का उपयोग करना मान लें कि मेरे पास एम तत्वों के साथ वेक्टर वी है, और वेक्टर को यादृच्छिक एक्सेस इंडेक्स I कहा जाता है।कंटेनर
जब मैं सूचकांक में वृद्धि करता हूं, यदि यह सीमा से बाहर हो जाता है, तो मैं पहले (शून्य) तत्व को इंडेक्स करना चाहता हूं। इसी तरह, जब मैं सूचकांक में कमी करता हूं, अगर सूचकांक < 0 है, तो मैं अंतिम तत्व को इंडेक्स करना चाहता हूं। पल मैं एक बार में केवल कंटेनर एक तत्व के माध्यम से आगे बढ़ रहा हूँ पर है, इसलिए इस समारोह के साथ आया था:
unsigned int GetIndexModM(int index,unsigned int m) {return (index + m) % m;}
कॉल-साइट इस प्रकार दिखाई देंगे:
std::vector<Whatever> v = ... // initialise with 5 elements
unsigned int i = 0;
unsigned int j = GetIndexModM(static_cast<int>(i) - 1,v.size()); // get preceeding index
यह कार्य नहीं करेंगी
unsigned int j = GetIndexModM(static_cast<int>(i) - 17,v.size()); // oops: returns -2
मेरा प्रश्न: एक समारोह है कि किसी भी पूर्णांक लेता है और यह एक सूचकांक के रूप में जगह है रिटर्न के सबसे सुरुचिपूर्ण कार्यान्वयन क्या है लेकिन अगर एक एक मूल्य> मीटर सूचकांक से घटा देती है असफल?
val = ((val % mod_val) + mod_val) % mod_val;
उदाहरण के लिए, मान लेते हैं हम 0 और 359 के बीच समावेशी मूल्य रखना चाहते हैं:
कुछ प्लेटफार्मों पर, तुलनात्मक लागत पर दूसरे मॉड्यूलो ऑपरेशन से बचने के लिए तेज़ी से हो सकता है: 'val = val% mod; वापसी मूल्य <0? वैल + मोड: वैल; ' –
क्या यह काम करता है जब' val <-mod_val', या यह केवल '-mod_val
@ एंड्रे कैरॉन - यह उस परिदृश्य में काम करता है, मैंने एक और उदाहरण जोड़ा (अंतिम प्रिंटफ देखें)। – dcp