2012-03-10 17 views
6

क्या मुझे वेक्टर के बजाय डेक का उपयोग करना चाहिए यदि मैं कंटेनर की भिखारी में भी तत्वों को धक्का देना चाहता हूं? मुझे सूची का उपयोग कब करना चाहिए और इसका क्या मतलब है?एसटीएल कंटेनर - वेक्टर, सूची और डेक के बीच अंतर

उत्तर

9

deque का उपयोग करें यदि आपको अनुक्रम और यादृच्छिक पहुंच की शुरुआत और अंत में कुशल सम्मिलन/निष्कासन की आवश्यकता है; list का उपयोग करें यदि आपको यादृच्छिक पहुंच के बलिदान पर कहीं भी कुशल सम्मिलन की आवश्यकता है। list तत्वों के इटरेटर और संदर्भ कंटेनर के लगभग किसी भी उत्परिवर्तन के तहत बहुत स्थिर हैं, जबकि deque में बहुत ही असाधारण इटरेटर और संदर्भ अमान्यता नियम हैं (इसलिए सावधानीपूर्वक जांचें)।

इसके अलावा, list एक नोड आधारित कंटेनर, जबकि एक deque सन्निहित स्मृति का हिस्सा का उपयोग करता है, तो स्मृति इलाके प्रदर्शन प्रभाव है कि asymptotic जटिलता अनुमानों के अनुसार काटा नहीं जा सकता हो सकता है।

deque लगभग हर जगह vector के प्रतिस्थापन के रूप में कार्य कर सकता है और शायद सी ++ में "डिफ़ॉल्ट" कंटेनर माना जा सकता है (इसकी अधिक लचीली स्मृति आवश्यकताओं के कारण); vector को प्राथमिकता देने का एकमात्र कारण यह है कि जब आपके अनुक्रम का एक गारंटीकृत संगत स्मृति लेआउट होना चाहिए।

+1

'वेक्टर' लगभग हमेशा मेरे अनुभव में 'डेक' से बेहतर प्रदर्शन करता है। –

+3

@ डोनरेबा: यह उपयोग के मामले पर निर्भर करता है, और प्रोफाइलिंग वास्तव में एकमात्र उत्तर है। यदि आप एक बड़ी रेंज आवंटित करना चाहते हैं, तो एक वेक्टर संघर्ष कर सकता है, जबकि डेक पुराने लोगों को स्थानांतरित किए बिना नए हिस्से आवंटित कर सकता है। और निश्चित रूप से यह निर्भर करता है कि आप क्या कर रहे हैं। –

7

deque और vector यादृच्छिक पहुंच प्रदान करते हैं, list केवल रैखिक पहुंच प्रदान करता है। इसलिए यदि आपको कंटेनर करने में सक्षम होना चाहिए [i], तो list का नियम है। दूसरी ओर, आप कहीं भी list में आइटम को सम्मिलित और हटा सकते हैं, और vector और deque के बीच में ऑपरेशन धीमे हैं।

deque और vector बहुत समान हैं, और मूल रूप से अधिकांश उद्देश्यों के लिए अदला-बदले हैं। उल्लेख करने के लायक केवल दो मतभेद हैं। सबसे पहले, vector केवल कुशलता से अंत में नई आइटम जोड़ सकता है, जबकि deque किसी भी अंत में कुशलता से आइटम जोड़ सकता है। तो फिर आप कभी भी vector का उपयोग क्यों करेंगे? deque के विपरीत, vector गारंटी देता है कि सभी आइटम संगत स्मृति स्थानों में संग्रहीत किए जाएंगे, जो कुछ स्थितियों में तेज़ी से तेज़ी से चलते हैं।

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