std::swap
की विशेषज्ञता अब वैकल्पिक है, लेकिन नहीं पदावनत है। तर्क प्रदर्शन है।
प्रोटोटाइप कोड के लिए, और शायद अधिक शिपिंग कोड के लिए भी, std::swap
बहुत तेज़ होगा। हालांकि यदि आप ऐसी परिस्थिति में हैं जहां आपको अपने कोड से हर छोटी सी चीज की आवश्यकता है, तो एक कस्टम स्वैप लिखना अभी भी एक महत्वपूर्ण प्रदर्शन लाभ हो सकता है।
उस मामले पर विचार करें जहां आपकी कक्षा के पास अनिवार्य रूप से एक मालिक है और आपके चालक कन्स्ट्रक्टर और असाइनमेंट को ले जाना है, उसे केवल एक सूचक से निपटना होगा।प्रत्येक सदस्य के लिए मशीन लोड और स्टोर की गणना करें:
कन्स्ट्रक्टर ले जाएं: 1 लोड और 2 स्टोर्स।
असाइनमेंट ले जाएं: 2 भार और 2 स्टोर।
कस्टम स्वैप: 2 भार और 2 स्टोर।
std::swap
1 चाल निर्माण और 2 चाल असाइनमेंट, या: 5 भार और 6 स्टोर हैं।
एक कस्टम स्वैप संभावित रूप से std::swap
से दो या तीन गुना तेज है। हालांकि किसी भी समय आप भार और दुकानों की गिनती करके कुछ की गति को समझने की कोशिश कर रहे हैं, दोनों दुष्ट तेजी से होने जा रहे हैं।
नोट: अपने चाल असाइनमेंट की लागत की गणना करने में, सुनिश्चित करें और ध्यान दें कि आप एक स्थानांतरित मूल्य से आगे बढ़ेंगे (std::swap
एल्गोरिदम में)। यह अक्सर एक शाखा की लागत पर, एक deallocation की लागत को अस्वीकार करता है।
स्रोत
2011-12-23 15:04:55
मैं कहना चाहता हूं कि स्कॉट या हर्ब द्वारा _C++ और Beyond_ पर इसका उल्लेख किया गया था, लेकिन मुझे इसके बारे में कुछ भी नहीं मिल रहा है। –
संबंधित: [semantics == कस्टम स्वैप फ़ंक्शन अप्रचलित ले जाएं?] (Http://stackoverflow.com/questions/6416385/move-semantics- कस्टम-wap- कार्यक्षमता- अप्रचलित) – Xeo
@Xeo: धन्यवाद, मैं पूरी तरह से भूल गया था वह प्रश्न/उत्तर। क्या मुझे लगातार होने के लिए अंक मिलते हैं? :-) मुझे यकीन है कि अन्यथा लाल चेहरे का सामना करना पड़ता! –