std::copy
के बाद से यह मूल्य भिन्न प्रकार के साथ कंटेनर संभाल कर सकते हैं (उदाहरण के लिए std::vector<float>
से std::vector::<double>
को कॉपी) एक अधिक सामान्य दृष्टिकोण है। लेकिन जब दोनों प्रकार के कंटेनर के लिए मान प्रकार समान होता है, तो क्या इससे कोई फर्क पड़ता है कि मैं std::copy
के बजाय कॉपी कन्स्ट्रक्टर का उपयोग करता हूं?क्या std :: प्रतिलिपि और कंटेनर की कॉपी कन्स्ट्रक्टर के बीच कोई प्रदर्शन अंतर है?
उत्तर
प्रदर्शन के बारे में चिंता मत करो, वे सब सुपर पास होना चाहिए। इसके बजाए:
- यदि आप एक प्रतिलिपि बनाने वाले नए कंटेनर बना रहे हैं, तो कॉपी कन्स्ट्रक्टर या दो-इटरेटर कन्स्ट्रक्टर (यदि विभिन्न तत्व प्रकार हैं) का उपयोग करें।
- यदि आप किसी मौजूदा कंटेनर को प्रतिस्थापित (असाइन कर रहे हैं), उचित असाइनमेंट ऑपरेटर या
assign
सदस्य का उपयोग करें। - आप तत्वों का एक सबसेट से बदल रहे हैं, तो
std::copy
का उपयोग करें।
सटीक रूप से आप जो करने का प्रयास कर रहे हैं उसका प्रतिनिधित्व करके, आप संकलक को अपने कोड को अनुकूलित करने के लिए सबसे संभावित जानकारी देते हैं (उदाहरण के लिए सीधे मौजूदा कंटेनर से निर्माण करना यह स्मृति के बारे में बिल्कुल सही आवंटित कर सकता है) ।
एक संभावित रूप से महत्वपूर्ण अंतर तब होता है जब आपके पास ऐसी स्थिति होती है जहां आप कॉपी कन्स्ट्रक्टर की बजाय चालक कन्स्ट्रक्टर का आह्वान करने में सक्षम होते हैं (उदाहरण के लिए जब आप जिस ऑब्जेक्ट से प्रतिलिपि बना रहे हैं वह एक रावल्यू है, जैसे फ़ंक्शन का रिटर्न वैल्यू)। यदि आपके पास ऐसी स्थिति है, तो आप निश्चित रूप से यह सुनिश्चित करना चाहते हैं कि आप std :: copy का उपयोग करने के बजाय निर्माण या स्थानांतरित करने के द्वारा इसका लाभ उठाएं।
असल में यह सिर्फ एक और कारण मार्क बी की सलाह का पालन करने के लिए है।
ठीक है, तो वहाँ * एल्गोरिथ्म * [ 'std :: move'] (http://en.cppreference.com/w/cpp/algorithm/move) मामले में आप तत्वों का एक सबसेट ले जाना चाहते है। – Snps
वेक्टर के तत्वों पर std :: move का उपयोग करना वेक्टर स्वयं को असाइन करने/स्थानांतरित करने के समान नहीं है। यह बहुत महंगा हो सकता है। – mattnewport
यह हो सकता है, लेकिन आम तौर पर तत्वों की प्रतिलिपि बनाना सबसे महंगा हिस्सा है। – Snps
- 1. कॉपी और चालक के बीच दक्षता अंतर
- 2. एक कन्स्ट्रक्टर निजी और = हटाने के बीच अंतर क्या है?
- 3. सर्वलेट कंटेनर और वसंत कंटेनर के बीच क्या अंतर है?
- 4. क्या कोई ऑब्जेक्ट कॉपी कन्स्ट्रक्टर
- 5. क्या डीबग और रिलीज के बीच कोई (प्रदर्शन) अंतर है?
- 6. क्या std :: set :: iterator और std :: set :: const_iterator के बीच कोई परिचालन अंतर है?
- 7. std :: थ्रेड कन्स्ट्रक्टर क्या पॉइंटर पास करने और रेफरी से गुज़रने के बीच कोई अंतर है?
- 8. std :: condition_variable और std :: condition_variable_any के बीच क्या अंतर है?
- 9. कॉपी और क्लोनिंग के बीच क्या अंतर है?
- 10. std :: partial_sum और std :: inclusive_scan के बीच क्या अंतर है?
- 11. std :: runtime_error कन्स्ट्रक्टर में पारित स्ट्रिंग की प्रतिलिपि बनाता है?
- 12. कॉपी कन्स्ट्रक्टर और डिफॉल्ट कन्स्ट्रक्टर
- 13. std :: cout और std :: wcout के बीच क्या अंतर है?
- 14. std :: merge और std :: set_union के बीच क्या अंतर है?
- 15. :: std :: string और std :: string के बीच क्या अंतर है?
- 16. अभ्यास में std :: sort और std :: stable_sort के बीच प्रदर्शन अंतर कितना बड़ा है?
- 17. प्रदर्शन के बीच कोई अंतर और प्रदर्शन ब्लॉक
- 18. std :: वेक्टर की कॉपी कन्स्ट्रक्टर कैसे काम करता है?
- 19. "कंटेनर" और "डेटा संरचना" के बीच क्या अंतर है?
- 20. कोई कॉपी कन्स्ट्रक्टर उपलब्ध नहीं है या कॉपी कन्स्ट्रक्टर को 'स्पष्ट' घोषित किया गया है
- 21. कन्स्ट्रक्टर या कॉपी कन्स्ट्रक्टर?
- 22. सी ++, कॉपी कन्स्ट्रक्टर में std :: vector <Class *> की सही ढंग से प्रतिलिपि कैसे करें?
- 23. std :: tie और std :: make_tuple के बीच std :: ref arguments के बीच क्या अंतर है?
- 24. क्या $ @ और "$ @" के बीच कोई अंतर है?
- 25. क्या जावाक डीबग के बीच में कोई प्रदर्शन अंतर है?
- 26. ++ iterator और iterator ++ के बीच प्रदर्शन अंतर?
- 27. कॉपी और क्लोन के बीच क्या अंतर है?
- 28. एंड्रॉइड कन्स्ट्रक्टर और ऑनक्रेट() के बीच क्या अंतर है?
- 29. कॉपी कन्स्ट्रक्टर
- 30. क्या एक एसवीएन कॉपी और एक एसवीएन शाखा के बीच कोई अंतर है?
std :: प्रतिलिपि पूर्व शर्त है (जैसे .: तय सीमा मान्य है)। किसी अन्य कंटेनर का असाइनमेंट इन पूर्व शर्त को इंगित नहीं करता है। आप वास्तव में विभिन्न उपयोग मामलों की तुलना करते हैं, जो तुलनीय नहीं हैं। –