QVectorजैसा std::vectorकि आप नाम से अनुमान लगा सकते हैं, ज्यादातर अनुरूप है । के साथ स्पष्ट सहयोग के बावजूद, QListकरीब है । यह वस्तुओं को सीधे स्टोर नहीं करता है, बल्कि उन्हें पॉइंटर्स को स्टोर करता है। आप दोनों सिरों पर त्वरित सम्मिलन के सभी लाभ प्राप्त करें और reallocations प्रतिलिपि कंस्ट्रक्टर्स के बजाय संकेत दिए गए फेरबदल को शामिल है, लेकिन एक वास्तविक की spacial इलाके खोना या , और ढेर आवंटन का एक बहुत प्राप्त करें। यह छोटी वस्तुओं के लिए ढेर के आवंटन से बचने के लिए कुछ निर्णय ले रहा है, जो स्थानिक इलाके को फिर से प्राप्त कर रहा है, लेकिन जो मैं समझता हूं कि यह केवल एक से छोटी चीजों पर लागू होता है ।boost::ptr_dequestd::liststd::dequestd::vectorint
QLinkedListके अनुरूप है std::list, और इसके सभी डाउनसाइड हैं। सामान्यतया, यह आपके कंटेनर का अंतिम विकल्प होना चाहिए।
क्यूटी लाइब्रेरी QListवस्तुओं के उपयोग के लिए बहुत अनुकूल है , इसलिए अपने स्वयं के कोड में उनका पक्ष लेना कभी-कभी कुछ अस्वाभाविक टेडियम से बच सकता है। अतिरिक्त हीप का उपयोग और वास्तविक डेटा की यादृच्छिक स्थिति कुछ परिस्थितियों में सैद्धांतिक रूप से चोट पहुंचा सकती है, लेकिन बार-बार अप्रभावी है। इसलिए मैं सुझाव देता हूं कि QListजब तक प्रोफाइलिंग एक को बदलने का सुझाव न दे QVector। यदि आप सन्निहित आवंटन को महत्वपूर्ण होने की उम्मीद करते हैं [पढ़ें: आप कोड के साथ हस्तक्षेप कर रहे हैं जो T[]एक QList<T>] के बजाय उम्मीद करता है कि यह भी QVectorबल्ले से सही से शुरू करने का एक कारण हो सकता है ।
यदि आप सामान्य रूप से कंटेनरों के बारे में पूछ रहे हैं, और केवल संदर्भ के रूप में क्यूटी दस्तावेजों का उपयोग किया है, तो उपरोक्त जानकारी कम उपयोगी है।
एक std::vectorसरणी है जिसे आप आकार बदल सकते हैं। सभी तत्व एक-दूसरे के बगल में संग्रहीत होते हैं, और आप व्यक्तिगत तत्वों को जल्दी से एक्सेस कर सकते हैं। नकारात्मक पक्ष यह है कि सम्मिलन केवल एक छोर पर कुशल होते हैं। यदि आप बीच में या शुरुआत में कुछ डालते हैं, तो आपको कमरे बनाने के लिए अन्य वस्तुओं को कॉपी करना होगा। बड़े-ओह संकेतन में, अंत में सम्मिलन O (1) है, कहीं भी सम्मिलन O (N) है, और यादृच्छिक अभिगम O (1) है।
एक std::dequeसमान है, लेकिन ग्वारेंटी वस्तुओं को एक दूसरे के बगल में संग्रहीत नहीं किया जाता है, और दोनों छोरों पर सम्मिलन की अनुमति देता है ओ (1)। इसे एक बार में आवंटित की जाने वाली मेमोरी के छोटे हिस्से की भी आवश्यकता होती है, जो कभी-कभी महत्वपूर्ण हो सकती है। रैंडम एक्सेस O (1) है और मध्य में सम्मिलन O (N) है, उसी तरह a के लिए vector। स्थानिक इलाके की तुलना में बदतर है std::vector, लेकिन वस्तुओं का क्लस्टर होना है तो आप कुछ लाभ प्राप्त करते हैं।
एक std::listलिंक की गई सूची है। इसके लिए तीन मानक अनुक्रमिक कंटेनरों में से सबसे अधिक मेमोरी ओवरहेड की आवश्यकता होती है, लेकिन कहीं भी तेजी से प्रविष्टि प्रदान करता है ... बशर्ते आप पहले से जानते हों कि आपको कहां सम्मिलित करना है। यह व्यक्तिगत तत्वों तक यादृच्छिक पहुँच प्रदान नहीं करता है, इसलिए आपको O (N) में पुनरावृत्त करना होगा। लेकिन एक बार वहाँ, वास्तविक प्रविष्टि हे (1) है। इसका सबसे बड़ा लाभ यह std::listहै कि आप उन्हें एक साथ जल्दी से विभाजित कर सकते हैं ... यदि आप मानों की एक पूरी श्रृंखला को किसी भिन्न पर ले जाते हैं std::list, तो पूरा ऑपरेशन O (1) है। सूची में संदर्भों को अमान्य करना भी बहुत कठिन है, जो कभी-कभी महत्वपूर्ण हो सकता है।
एक सामान्य नियम के रूप में, मैं पसंद std::dequeकरता हूं std::vector, जब तक कि मुझे एक लाइब्रेरी के लिए डेटा को पारित करने में सक्षम होने की आवश्यकता नहीं है जो कच्चे सरणी की अपेक्षा करता है। std::vectorसन्निहित गारंटी है, इसलिए &v[0]इस उद्देश्य के लिए काम करता है। मुझे याद नहीं है कि पिछली बार मैंने एक का उपयोग किया था std::list, लेकिन यह लगभग निश्चित रूप से था क्योंकि मुझे शेष वैध संदर्भों के बारे में मजबूत छाप की जरूरत थी।