std:unique
वास्तव में आवश्यकतानुसार शुरुआत की ओर तत्वों को बदल देता है। शिफ्ट ऐसा नहीं है जैसा आप सोच रहे हों। इसे कुछ प्रचारित एक-तत्व-पर-समय-चीज़ होने की आवश्यकता नहीं है। यह आवश्यक हो सकता है कि तत्व चाल-असाइन करने योग्य होना आवश्यक हो। तत्व-स्थानांतरित होने के बाद, चाल-असाइनमेंट की परिभाषा के अनुसार, इसकी पूर्व सामग्री अनिर्दिष्ट है। आपके मामले में, यह केवल "मान" रखता है, लेकिन यह निर्दिष्ट मान नहीं है।
संक्षेप में, आप जो देख रहे बचे हुए मूल्यों है, और उनमें से कुछगैर विशिष्ट हो सकता है।
निम्नलिखित आपके डेटा का उपयोग कर एक सरल डेमो है। प्रारंभ में हमारे पास दो स्लॉट स्थान हैं, आर, और डब्ल्यू। मैं एल्गोरिदम std::unique
(मैं ईमानदारी से नहीं जानता) द्वारा उपयोग किए जाने वाले कोई वारंट नहीं करता है।
तुच्छ मामले (0 या 1-लंबाई अनुक्रम), जब एक मूल्य रखा यह डब्ल्यू ऊपर अगले स्लॉट में ले जाने से सौंपा है, और डब्ल्यू उन्नत है हो रहा है बाहर आवरण। भले ही इसे रखा गया हो या नहीं, आर हमेशा उन्नत है। पूरा होने पर, स्लॉट पिछले डब्ल्यू last
है (यानी स्लॉट पर बाईं ओर पहला, जिनमें से कुछ अनिर्दिष्ट मान हो सकते हैं)।
अपने डेटा को देखते हुए, अनुक्रम कुछ इस तरह होगा:
1, 2, 2, 2, 3, 3, 2, 2, 1 - different, since the write target
W R is the same as the read-point, do nothing,
and advance both R and W
1, 2, 2, 2, 3, 3, 2, 2, 1 - equivalent, advance R only
W R
1, 2, 2, 2, 3, 3, 2, 2, 1 - equivalent, advance R only
W R
1, 2, 2, 2, 3, 3, 2, 2, 1 - different, move the 3 to the next write
W R point and advance both R and W
1, 2, 3, 2, 3, 3, 2, 2, 1 - equivalent, advance R only
W R
1, 2, 3, 2, 3, 3, 2, 2, 1 - different, move the 2 to the next write
W R slot and advance both R and W
1, 2, 3, 2, 3, 3, 2, 2, 1 - equivalent, advance R only
W R
1, 2, 3, 2, 3, 3, 2, 2, 1 - different, move the 1 to the next write
W R slot and advance both R and W
1, 2, 3, 2, 1, 3, 2, 2, 1 - read is at end-of-sequence
W R
इस बिंदु पर, पाठक समाप्त हो गया है। डब्ल्यू का पहला स्लॉट last
है क्योंकि एल्गोरिदम जाता है (और वास्तव में end
हो सकता है यदि मूल अनुक्रम में कोई डुप्लीकेट नहीं था)। मैं आपको यह निर्धारित करने की चुनौती देता हूं कि यह करने के बाद "अनिर्दिष्ट" राज्य में कौन से तत्व (3,2,2,1) हैं।
संकेत: क्या स्थानांतरित किया गया था? क्या छोड़ा गया था? क्या ओवरराइट किया गया था? इससे क्या फर्क पड़ता है? कुछ भी ले जाया गया और देखते हैं कि last
से end
के अनुक्रम में बचे हुए है कि पढ़ने के स्लॉट पर 0
लिखने की कोशिश करें।
यह बहुत स्पष्ट नहीं है कि आप यहां क्या पूछ रहे हैं। एक बार जब मैं 'v' का निर्माण बदलता हूं तो यह संकलित होता है, जब मैं दौड़ता हूं, तो मुझे आउटपुट की उम्मीद होती है। – bentank
"... क्या कोई मुझे बता सकता है कि हमें कैसे 3 2 2 1 मिलता है" निश्चित रूप से, * हम नहीं *: [इसे लाइव देखें] (http://ideone.com/gLyemr)। क्या आपका मतलब है * बचे हुए * तत्व (आपके कोड में, 'अंतिम' से 'v.end() ') तक? – WhozCraig
हां, मैं सोच रहा था कि उन्हें v.end – Belphegor