बस "अतिरिक्त प्रति" को स्पष्ट करने के लिए @ecatmur का वर्णन करता है, यदि push_back
को मूल्य के आधार पर अपना तर्क प्राप्त हुआ, तो क्या होगा कि आप अपनी वस्तु से शुरू करेंगे। इसकी एक प्रति push_back
को इसके पैरामीटर के रूप में पास कर दी जाएगी। फिर push_back
वेक्टर में डालने के लिए की की एक प्रति बनायेगा।
push_back
के वास्तविक कार्यान्वयन के संदर्भ में इसका तर्क प्राप्त होता है, इसलिए (push_back
) आपकी मूल वस्तु की एक प्रति के रूप में सीधे वेक्टर में नई वस्तु बनाता है।
जैसा कि पहले से ही उल्लेख किया गया है, हाँ, सी ++ 11 के साथ चलने वाले अर्थशास्त्र का उपयोग करके, यह संभव होगा (हालांकि संभवतः विशेष रूप से फायदेमंद नहीं) मूल्य द्वारा तर्क पारित करने के लिए, और फिर उस तर्क से मूल्य को नई वस्तु में ले जाएं वेक्टर यदि वेक्टर में जो भी डाल रहे थे, तो कहें, एक स्ट्रिंग जिसमें ज्यादातर पॉइंटर और कुछ "बुक रखने" फ़ील्ड (आवंटित स्मृति की मात्रा, वर्तमान में उपयोग की जाने वाली मेमोरी की मात्रा) शामिल है, जो लगभग होगा एक संदर्भ पारित करने के रूप में कुशल, क्योंकि एक चाल सिर्फ एक उथल-पुथल प्रतिलिपि कर सकती है - पॉइंटर की प्रतिलिपि बनाएँ और पुस्तक को अपने सभी बिंदुओं के बजाए मूल्यों को स्वयं रखें। यदि, हालांकि, प्रश्न में वस्तु ने अपने सभी डेटा सीधे (यानी एक सूचक नहीं) रखा, तो एक चाल एक प्रतिलिपि जितनी धीमी होगी।
संदर्भ द्वारा उत्तीर्ण, सभी से प्रतिलिपि बनाता है जो कॉपी करता है, इसलिए स्ट्रिंग की तरह कुछ भी, यह आमतौर पर तेज़ है (इस तरह के मामले के लिए मूल वस्तु को अमान्य नहीं किया जा सकता है)। सी ++ 98/03 के साथ काम करने का मामूली लाभ भी है, न केवल सी ++ 11।
स्रोत
2012-08-01 15:44:07
मैं ऐसा करूँगा। मैंने इसे कल ही महसूस किया और मैं इसे तब से कर रहा हूं। धन्यवाद! – sachin2182