2012-11-05 24 views
5

नमस्ते मुझे एक एसएलएल कंटेनर की आवश्यकता है जिसे वेक्टर की तरह अनुक्रमित किया जा सकता है लेकिन पुराने तत्वों को स्मृति में स्थानांतरित नहीं करता है जैसे एक वेक्टर आकार बदलने या आरक्षित के साथ करेगा (जब तक कि मैं शुरुआत में एक बार आरक्षित नहीं करता, सभी तत्वों के लिए पर्याप्त क्षमता के साथ, जो मेरे लिए अच्छा नहीं है)। (ध्यान दें कि मैं तत्वों को बाध्यकारी करता हूं इसलिए मुझे उम्मीद है कि इन तत्वों का पता कभी भी नहीं बदला जाएगा)। तो मुझे यह डेक मिला है। क्या आपको लगता है कि यह इस उद्देश्य के लिए अच्छा है? महत्वपूर्ण: मुझे केवल पुशबैक की आवश्यकता है, लेकिन मुझे कंटेनर को छोटे हिस्सों में मांग पर बढ़ने की जरूरत है।stl डेक मेरे तत्वों को पुनः आवंटित करेगा (सी ++)?

उत्तर

10

std::deque "तत्वों को पीछे या आगे के तत्वों को जोड़ने या हटाने के दौरान" शेष तत्वों के पॉइंटर्स या संदर्भों को कभी भी अमान्य नहीं करता है, इसलिए हां, जब आप केवल push_back तत्वों के स्थान पर रहते हैं।

+0

धन्यवाद! क्या मैं आकार बदलने के बिना पुशबैक का उपयोग कर सकता हूं? चूंकि यह सॉस का आकार बदल सकता है तत्वों को ले जा सकते हैं। – user1132655

+0

@ user1132655: सुनिश्चित करें, बस 'push_back'। आपको लगता है कि आपको 'आकार बदलने' की आवश्यकता क्यों होगी? यह मेरे लिए समयपूर्व अनुकूलन की तरह लगता है। –

+0

क्षमा करें, मैं पूछना चाहता था, नहीं कर सकता, बस आकार बदलने के साथ ऐसा लगता है कि अनुकूलन मेरे तत्वों को बदल सकता है, इसलिए इस मामले में इसका उपयोग नहीं करना चाहिए। – user1132655

3

the documentation का सावधानीपूर्वक पढ़ने से संकेत मिलता है कि जब तक आप शुरुआत में या अंत में डालेंगे तो यह पॉइंटर्स को अमान्य नहीं करेगा, और पॉइंटर्स को अमान्य करने का संकेत यह है कि डेटा की प्रतिलिपि बनाई जा रही है या स्थानांतरित किया जा रहा है।

जिस तरह से इसका निर्माण किया गया है वह एक लिंक्ड सूची की तरह नहीं है, जहां प्रत्येक तत्व को व्यक्तिगत रूप से आवंटित किया जाता है, लेकिन प्रदर्शन कारणों से संभावित रूप से लिंक किए गए सरणी के सेट के रूप में। बीच में तत्वों के क्रम में परिवर्तन करने के लिए डेटा को स्थानांतरित करने की आवश्यकता होगी।

+2

एरे की एक सरणी की तरह अधिक। एक लिंक्ड सरणी एक लिंक्ड सूची की तुलना में बहुत बेहतर ट्रैवर्सल प्रदान करती है लेकिन कोई यादृच्छिक पहुंच नहीं है। – Puppy

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

  • कोई संबंधित समस्या नहीं^_^