2010-01-21 18 views
17

क्षमा करें अगर इससे पहले पूछा गया है, लेकिन मुझे आश्चर्य है कि std::vector::front() का उपयोग क्या है।std :: vector :: front() के लिए क्या उपयोग किया जाता है?

क्या उदाहरण का उपयोग करने का कोई कारण है myvector.front()myvector[0] या myvector.at(0) के बजाय?

+0

अधिक रोचक ... क्यों एक फ्रंट() है जब पहले से ही एक शुरुआत() है? – Inverse

+0

@ इनवर्क्स: क्योंकि कंटेनर एडाप्टर 'std :: queue' और 'std :: stack' में' front()' है लेकिन 'start()' नहीं है। –

+0

और 'बैक()' के साथ संगत होने के लिए, 'myvector [myvector.size() - 1] 'वह सीधे आगे नहीं है। – dalle

उत्तर

17

सूचियों पर काम करने वाले कुछ सामान्य एल्गोरिदम इसका उपयोग करते हैं।

यह एक सामान्य सिद्धांत का एक उदाहरण है: अगर आप सभी अर्थ विज्ञान आप समर्थन ही नहीं, कार्यान्वयन आप समर्थन के लिए accessors प्रदान करते हैं यह सामान्य रूप से लिखने के लिए आसान है और इसलिए कोड का पुन: उपयोग करने के लिए आसान है।

+1

+1: ठोस संपादन। –

+1

आह, इसलिए यह अन्य कंटेनर कक्षाओं के साथ स्थिरता के बारे में अधिक है। जिज्ञासा से बाहर: वेक्टर :: फ्रंट() के बराबर [0] या (0) पर है? मेरा मतलब है, वेक्टर खाली होने पर क्या होता है? – Tim

+1

@Tim: अच्छा सवाल। विकिपीडिया का कहना है कि अनिर्धारित व्यवहार: http://en.wikipedia.org/wiki/Vector_(C%2B%2B) और http://fredosaurus.com/notes-cpp/stl-containers/sequence-functions.html वही कहता है जैसा कि [0] जो मुझे लगता है कि वेक्टर खाली होने पर भी अपरिभाषित है। – dmckee

13

यदि मावेक्टर का प्रकार किसी अन्य डेटा प्रकार में बदलता है जो अनुक्रमिक नहीं है, जैसे सूची, तो आपको कंटेनर के सामने पहुंचने वाले कोड को बदलना नहीं होगा।

+2

आपके और पिछले पोस्टर के उत्तरों को संयुक्त किया जाना चाहिए। जीत के लिए सार अवधारणा + ठोस उदाहरण। – Omnifarious

4

ऐसा करने से कुछ स्थिर पॉलीमोर्फिज्म कहा जाता है।

मान लें कि मैंने कतार कक्षा का उपयोग करके एक एल्गोरिदम लिखा है। कतार के अंत में जोड़ने के लिए कतार के अगले तत्व को प्राप्त करने के लिए इसमें एक फ्रंट() फ़ंक्शन है, और एक एनक्यू() फ़ंक्शन है। अब मान लीजिए कि मैंने पाया कि यह कतार वर्ग खराब और बहुत धीमा लिखा गया है, और मैं std :: वेक्टर का उपयोग करना चाहता हूं जो बहुत तेज़ है (मुझे पता है कि एक std :: queue है, यह सिर्फ एक उदाहरण है)। यदि std :: वेक्टर का पहला तत्व प्राप्त करने का एकमात्र तरीका v [0] के साथ था, तो मुझे अपने कोड से गुजरना होगा और मेरी सभी कॉल को [0] के साथ आगे() में बदलना होगा। लेकिन फ्रंट() को लागू करके, std :: वेक्टर अब मेरी कतार कक्षा के लिए एक ड्रॉप-इन प्रतिस्थापन हो सकता है। मुझे बदलने वाला एकमात्र कोड मेरे एल्गोरिदम में कंटेनर का प्रकार है।

संबंधित मुद्दे