सी ++ 11 से पहले चलने वाले अर्थशास्त्र शुरू करने से पहले, std::swap
के सामान्य कार्यान्वयन में दो प्रतियां करने के अलावा कोई विकल्प नहीं था। वैचारिक रूप से, इस:
template <class T>
void swap(T &a, T &b)
{
T t(a);
a = b;
b = t;
}
सूचना है कि इस सामान्य std::swap
वस्तु में पारित के आंतरिक भागों के बारे में कुछ भी (क्योंकि यह एक मनमाना उपयोगकर्ता प्रकार के साथ कहा जा सकता है, उदाहरण के लिए) पता नहीं है, और इस तरह के लिए है प्रतियां करें ध्यान दें कि कंटेनर के लिए, इसका मतलब तत्वों की प्रतिलिपि बनाना है।
एक अनुकूलित सदस्य फ़ंक्शन swap
प्रदान करना जो कुछ आंतरिक पॉइंटर्स को फिर से इंगित करता है इसलिए एक बड़ी प्रदर्शन जीत है।
चूंकि स्थानांतरण अर्थशास्त्र पेश किए गए थे, इसलिए सामान्य स्वैप को चाल का उपयोग करके अधिक कुशल बनाया जा सकता है। फिर, धारणात्मक:
template <class T>
void swap(T &a, T &b)
{
T t(::std::move(a));
a = ::std::move(b);
b = ::std::move(t);
}
बेशक, व्यवहार में, यह शायद इस कदम संचालन किया जा रहा है गैर फेंक शामिल है, और अतिरिक्त बिट्स के सभी प्रकार के बारे में आवश्यकताएं होती हैं।
जगह पर चलने वाले अर्थशास्त्र के साथ, अनुकूलित सदस्य संस्करण शायद पहले की तुलना में कम महत्वपूर्ण हैं। लेकिन यह अभी भी संभव है कि एक प्रकार के सटीक कार्यान्वयन विवरण के ज्ञान के साथ, इसे तीन सामान्य चालों से तेज़ कर दिया जा सकता है।
उपरोक्त चर्चा के अलावा, सूचना std::swap
की है कि विशेष प्रकार के भार के लगभग सभी प्रकार के मानक पुस्तकालय में परिभाषित के लिए मौजूद हैं। इन अधिभारों को क्या करना है बस एक ऑपरेटिंग पर अनुकूलित swap
सदस्य फ़ंक्शन को कॉल करें। इस तरह, आपके पास दोनों दुनिया के सर्वश्रेष्ठ हैं: एक सामान्य मुक्त फ़ंक्शन swap
जिसे किसी भी चीज़ के साथ बुलाया जा सकता है, लेकिन जिसने मानक लाइब्रेरी के बारे में जानकारी के लिए कार्यान्वयन को अनुकूलित किया है।
सदस्य कार्यों को पूर्ववत करना और std::swap
ओवरलोड के अंदर अनुकूलित कार्यान्वयन प्रदान करना संभव होगा, लेकिन इसका मतलब यह होगा कि उन्हें संभवतः मित्र होने की आवश्यकता होगी और उपयोगकर्ता कोड के लिए यह भी बदतर माना जा सकता है।
आमतौर पर - अगर कुछ एसटीएल कंटेनर के पास सदस्य कार्य होता है, तो इसकी कार्यक्षमता ' 'के माध्यम से भी उपलब्ध है, इसका मतलब है कि एसटीएल कंटेनर, डेटा की संरचना को जानकर, कार्यक्षमता को तेज कर सकता है, कि सामान्य ' 'एक। –