2012-12-21 31 views
29

मैं बस सोच रहा था, क्यों किसी को भी इस बारे में होगा:iter_swap का क्या मतलब है?

std::iter_swap(i, k); 
बजाय इस बात का

?

std::swap(*i, *k); // saved a few keystrokes! 

तब मैं iter_swap के कार्यान्वयन में देखा, और निश्चित रूप से यह केवल swap बजाय std::swap का उपयोग करता है हम पहले से ही namespace std में हैं के बाद से, वैसे भी।

किसी को भी यह क्यों लिखा है:

using std::swap; 
swap(a, b); 
बजाय इस बात का

जो मुझे अगले प्रश्न की ओर जाता है?

std::iter_swap(&a, &b); // saved an entire line of code! 

क्या कोई महत्वपूर्ण अंतर/मुद्दे हैं जो मैं यहां देख रहा हूं?

+1

बचत कोड सार्थक हो सकता है (कम जटिलता के बारे में तर्क करने में आसान है) ... लेकिन बचत * कोड की * लाइनों? उबाऊ बेकार, अक्सर काउंटर-उत्पादक। –

+2

नहीं, नहीं, आपको std :: iter_swap का उपयोग करके 'करने की आवश्यकता है; iter_swap (i, k); 'क्योंकि' iter_swap' विशेष हो सकता है। (बस मजाक कर। मुझे लगता है।) – Potatoswatter

+3

आप में ध्यान दिया है * एक * के कार्यान्वयन 'iter_swap', लेकिन क्यों आप मान इसे' std :: swap' के साथ लागू किया जा सकता है? –

उत्तर

33

एसजीआई डॉक्स (here) से:

[1] सच पूछिये तो, iter_swap अनावश्यक है। यह केवल तकनीकी कारणों से मौजूद है: कुछ परिस्थितियों में, कुछ कंपेलरों को स्वैप (* ए, * बी) की व्याख्या करने के लिए आवश्यक प्रकार की कटौती करने में कठिनाई होती है।

10

अपने दूसरे सवाल का जवाब करने के लिए, using + swap संकलक (ADL का उपयोग करके) उपयोगकर्ता परिभाषित स्वैप कार्यों कि डिफ़ॉल्ट कार्यान्वयन की तुलना में अधिक कुशल हो सकता है का उपयोग करने के लिए अनुमति देता है। स्पष्ट रूप से std::swap कह ADL और किसी भी कस्टम स्वैप तरीकों यह शायद ढूँढने में सक्षम किया गया है प्राप्त होते हैं।

iter_swap के लिए यह संभवतः टेम्पलेट्स में उपयोग करने के लिए है और स्पष्ट रूप से एक स्वैप की बजाय इरादा इंगित करता है जो संकेत दे सकता है कि आप एक सूचक की अपेक्षा करते हैं।

+0

ओह मैं इस उपेक्षित क्योंकि मैं बिल्कुल आश्वस्त फ्रेड ADL और std :: स्वैप मुहावरों के बारे में जानता हूँ :) – sehe

+0

कोई है मेरे दूसरे प्रश्न में 'std :: swap' आमंत्रण। मेरा मुद्दा यह था कि 'std :: iter_swap' उपयोगकर्ता का परिभाषित स्वैप भी उठाएगा, बिना 'उपयोग' कथन लिखने के। सही? – fredoverflow

+1

@FredOverflow: लेकिन उपयोगकर्ता द्वारा परिभाषित नहीं 'iter_swap's;) – MSalters

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^