c++ - which one is faster using erase or resize in a vector? -
निम्न कोड में जो एक अधिक कुशल कॉलिंग आकार बदलता है या मिटाना है?
vector & lt; पूर्णांक & gt; एक (5000); // .... वेक्टर & lt; int & gt; :: इटरेटर यह = निकालें (a.begin (), a.end (), 8) a.resize (std :: दूरी (a.begin (), यह)); // या a.ase (यह, a.end ()); मुझे लगता है कि यह डुप्लिकेट तत्वों की संख्या पर निर्भर करता है?
"मुझे लगता है कि यह डुप्लिकेट तत्वों की संख्या पर निर्भर करता है?"
नहीं। int के लिए कोई डिस्ट्रक्टर नहीं है, इसलिए 1 डुप्लिकेट या 1000 कोई फर्क नहीं पड़ता। या तो सभी कार्यों को करने की ज़रूरत है इन-उपयोग तत्वों के नए सिरे के आंतरिक रिकॉर्ड को सेट किया गया है। नतीजतन, को हटायें () का प्रदर्शन महँगी बात है, resize / मिटाना नहीं है। (और यहां तक कि अगर कोई नाशक था, तो वे समान संख्या में तत्वों को बुलाते हैं, इसे लगभग एक ही समय लेते हुए)। आप लगभग किसी भी अनुभवी मानक पुस्तकालय के कार्यान्वयन पर विश्वास नहीं कर सकते बेवकूफ कुछ और आवश्यक से अधिक समय तक लेते हैं, इसलिए अंतर्दृष्टि दी जाती है कि व्यवहार बराबर हैं - प्रति जे्रोक का उत्तर - आगे कोई जांच करने का कोई कारण नहीं है जब तक कि आपके प्रोफाइलर आपको बताए।
- और कुछ "आकार" सदस्य को अद्यतन नहीं करना मानक द्वारा अनिवार्य नहीं है, लेकिन हर कार्यान्वयन मैं वास्तव में एक "अंत" सूचक को स्टोर में देखा है, जो समझ में आता है क्योंकि यह
iter! = V.end () का समर्थन करता है जहां बीटरेटर को धीमे शुरुआत के बिना पॉइंटर्स के रूप में कार्यान्वित किया जाता है + + अंत () के लिए आकार अंकगणितीय गणना, और न ही समान रूप से बदसूरत विशेष आवरण, अंत-1 इटरेटर को बढ़ाना कुछ प्रहरी राज्य का उत्पादन करता है।
Comments
Post a Comment