सी++ एसटीडी स्वैप

Si Esatidi Svaipa



'स्वैपिंग दो या दो से अधिक चीजों के आदान-प्रदान का कार्य है। प्रोग्रामिंग में दो चरों के बीच के डेटा को स्विच किया जा सकता है। वास्तविक जीवन में दो व्यक्तियों के बीच चीजों का आदान-प्रदान संभव है। C++ में मानक लाइब्रेरी फंक्शन स्वैप () का उपयोग करके किन्हीं दो वस्तुओं के मूल्यों की अदला-बदली की जा सकती है। इसे C11 में 'यूटिलिटी' हेडर के तहत रखा गया है। सी ++ में स्वैप () फ़ंक्शन में सरणियों के लिए एन की जटिलता है क्योंकि प्रत्येक तत्व को व्यक्तिगत रूप से स्वैप किया जाना चाहिए, जबकि स्थिरांक के लिए फ़ंक्शन की कठिनाई स्थिर है। यदि कोई चर तत्व विफल हो जाता है तो स्वैप () फ़ंक्शन एक चेतावनी या त्रुटि फेंकता है। नीचे दिए गए std::swap() के लिए फ़ंक्शन के हस्ताक्षर को देखें:

वाक्य - विन्यास:

टेम्पलेट < कक्षा टी > शून्य बदलना ( टी और चर_1 , टी और चर_2 ) ;

पहले वेरिएबल और दूसरे वेरिएबल के दोनों मान, जिनमें से दोनों स्टोर वैल्यू हैं, को स्वैप किया जाना है। फ़ंक्शन केवल चर के मानों को स्विच करता है; इसका कोई आउटपुट नहीं है।'







C++ में स्वैप () फ़ंक्शन का कार्य करना

निम्नलिखित तीन पंक्तियों का उपयोग करके स्वैप फ़ंक्शन को C++ में कार्यान्वित किया जाता है।



टेम्पलेट शून्य बदलना ( टी और मैं , टी और जे ) {
टी अस्थायी = कक्षा :: कदम ( मैं ) ;
मैं = कक्षा :: कदम ( जे ) ;
जे = कक्षा :: कदम ( अस्थायी ) ;
}

बयान 'टी अस्थायी = एसटीडी :: चाल (i)'; तत्व 'i' की एक प्रति बनाता है और उसकी नकल करता है। यहाँ, “i = std::move(j)”; 'i' की मूल वस्तुओं को त्याग देता है और मूल 'j' के स्थान पर 'j' की 'i' प्रति संग्रहीत करता है। सूत्र 'जे = एसटीडी :: चाल (अस्थायी)'; अस्थायी के एक क्लोन के साथ 'i' सहेजें, और अस्थायी की समान सामग्री को हटा दें। साथ ही, स्वैप () फ़ंक्शन निष्पादन पूर्ण होने के बाद अस्थायी चर को हटा दें।



उदाहरण 1: एसटीडी का उपयोग कर कार्यक्रम :: स्वैप करने के लिए विधि को स्थानांतरित करें

जैसा कि नीचे दिखाया गया है, हम C++11 फीचर std::move का उपयोग करके दो ऑब्जेक्ट्स को स्वैप कर सकते हैं।





#शामिल करें

#शामिल करें <वेक्टर>



टेम्पलेट
शून्य बदलना ( टी और एक , टी और बी )
{
टी अस्थायी = कक्षा :: कदम ( एक ) ;
एक = कक्षा :: कदम ( बी ) ;
बी = कक्षा :: कदम ( अस्थायी ) ;
}
पूर्णांक मुख्य ( )
{
कक्षा :: वेक्टर सूची = { 10 , 12 , 13 , पंद्रह , 16 , 17 } ;
पूर्णांक मैं = 3 , जे = 5 ;
बदलना ( सूची [ मैं ] , सूची [ जे ] ) ;
के लिये ( पूर्णांक मैं : सूची ) {
कक्षा :: अदालत << मैं << '' ;
}
वापसी 0 ; }

हमारे पास एक टेम्प्लेट घोषणा है जिसमें एक ऑब्जेक्ट 'T' है। उसके बाद, हमने फ़ंक्शन को 'स्वैप' के रूप में स्थापित किया है। फ़ंक्शन 'T' प्रकार के दो पैरामीटर &a और &b लेता है। तर्कों के परिणामस्वरूप टी एंड ए, टी एंड बी पारित चर के पते को संदर्भित या संग्रहीत करता है और बिना वापस लौटाए सीधे उन पर लागू होता है, स्वैप (टी एंड ए, टी एंड बी) फ़ंक्शन को संदर्भ द्वारा कॉल कहा जाता है।



शून्य स्वैप के अंदर, हमने std::move विधि का उपयोग करके स्वैपिंग के एल्गोरिदम को लागू किया है। फिर, हमने प्रोग्राम मेन का निर्माण किया। यहां, हमने चर 'सूची' घोषित किया है और इसे संख्यात्मक मानों की सूची के साथ प्रारंभ किया है। हमने स्वैपिंग के लिए 'i' और 'j' के लिए मान निर्धारित किए हैं। दूसरे सूचकांक में स्थित अंकीय मान को पांचवें सूचकांक पर अंकीय मान से बदल दिया गया। फिर, हमने स्वैप फ़ंक्शन को कॉल किया और 'i' और 'j' इंडेक्स को स्वैपिंग के लिए पास किया। स्वैप की गई सूची को प्रिंट करने के लिए लूप के लिए उपयोग किया जाता है।

आउटपुट ने संशोधित सूची प्रदर्शित की। आप देख सकते हैं कि नई सूची ने निर्दिष्ट इंडेक्स के अनुसार मूल्य की अदला-बदली की है।

उदाहरण 2: प्रोग्राम का उपयोग करते हुए std::swap मेथड टू स्वैप

उपयोगिता शीर्षलेख (सी ++ 11 में) में पाए गए std :: स्वैप तंत्र का उपयोग सामान्य फिक्स है। इसे कार्य करने के लिए दो वस्तुओं के मूल्यों को स्विच किया जाता है।

#शामिल करें

#शामिल करें <वेक्टर>

#शामिल <उपयोगिता>



पूर्णांक मुख्य ( )
{
कक्षा :: वेक्टरएआर = { 3 , 6 , 9 , पंद्रह , 13 } ;
पूर्णांक मैं = 3 , जे = 4 ;

कक्षा :: बदलना ( आगमन [ मैं ] , आगमन [ जे ] ) ;

के लिये ( पूर्णांक मैं : आगमन ) {
कक्षा :: अदालत << मैं << '' ;
}

वापसी 0 ;
}

हेडर फ़ाइल <उपयोगिता> को आयात करके, हम अपने प्रोग्राम में स्वैप फ़ंक्शन तक पहुंच सकते हैं। यहां, हमने हेडर फाइल <उपयोगिता> को दो और महत्वपूर्ण पुस्तकालयों के साथ शामिल किया है। फिर, हमने int main विधि स्थापित की है। प्रोग्राम के मेन के अंदर, हमने वेरिएबल 'arr' बनाकर वेक्टर घोषित किया है। चर 'गिरफ्तारी' को पूर्णांक के पांच तत्वों के साथ आरंभ किया गया है। स्वैपिंग के लिए इंडेक्स पोजीशन को 'i' और 'j' को सौंपा गया है। चर 'i' और 'j' को तब निर्दिष्ट सूचकांक के मूल्य के स्वैप के लिए std::swap विधि में पारित किया जाता है। लूप के लिए, हमने स्वैप किए गए सरणियों को मुद्रित किया है।

एसटीडी::स्वैप विधि का उपयोग करके स्वैपिंग ऑपरेशन के बाद प्राप्त सूची को निम्नानुसार प्रदर्शित किया जाता है:

उदाहरण 3: प्रोग्राम का उपयोग करते हुए std::iter_swap मेथड को स्वैप करने के लिए

std::iter_swap एल्गोरिथम का उपयोग, जो एल्गोरिथम के लिए हेडर में सूचीबद्ध है, एक अतिरिक्त विकल्प है। जिस तरह से यह संचालित होता है वह उन वस्तुओं के मूल्यों को स्विच करके होता है जो प्रदान किए गए इटरेटर इंगित करते हैं।

#शामिल करें

#शामिल करें <वेक्टर>

#शामिल <पुनरावर्तक>

#शामिल <एल्गोरिदम>



पूर्णांक मुख्य ( )
{
कक्षा :: वेक्टरवेक = { 64 , 61 , 62 , 63 , 60 } ;
पूर्णांक मैं = 0 , जे = 4 ;
ऑटो आईटीआर1 = कक्षा :: अगला ( एक चीज़। शुरू करना ( ) , मैं ) ;
ऑटो आईटीआर2 = कक्षा :: अगला ( एक चीज़। शुरू करना ( ) , जे ) ;

कक्षा :: iter_swap ( आईटीआर1 , आईटीआर2 ) ;
के लिये ( पूर्णांक मैं : एक चीज़ ) {
कक्षा :: अदालत << मैं << '' ;
}
वापसी 0 ;
}

कार्यक्रम की मुख्य विधि के लिए, हमने एक वेक्टर चर 'vec' घोषित किया है और इसे संख्याओं की एक वेक्टर सूची सौंपी है। फिर, हमने 'i' और 'j' चर के लिए सूचकांक स्थिति निर्दिष्ट की। std::iter_swap विधि लागू की जाती है जो iter1 और iter2 को एक तर्क के रूप में लेती है। iter1 और iter2 को ऑटो कीवर्ड के साथ घोषित किया जाता है और इसमें पुनरावृत्ति ऑपरेशन होता है। लूप विधि निष्पादन पर वेक्टर सरणी के स्वैप किए गए मानों को प्रिंट करती है।

Std::iter_swap विधि ने निर्दिष्ट वैक्टर के मानों को सफलतापूर्वक बदल दिया।

उदाहरण 4: स्वैप करने के लिए अस्थायी चर के बिना उपयोग करने का कार्यक्रम

यह उदाहरण अस्थायी चरों के उपयोग के बिना C++ कोड में संख्याओं की अदला-बदली का एक नया तरीका दिखाता है।

#शामिल करें

नेमस्पेस एसटीडी का उपयोग करना ;

पूर्णांक मुख्य ( )
{
पूर्णांक x1 = दो , x2 = 12 ;
अदालत << 'स्वैपिंग से पहले।' << एंडली ;
अदालत << 'X1 =' << x1 << ', x2 =' << x2 << एंडली ;

x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;

अदालत << ' \एन अदला-बदली के बाद।' << एंडली ;
अदालत << 'X1 =' << x1 << ', x2 =' << x2 << एंडली ;

वापसी 0 ; }

आइए इस कार्यक्रम के संचालन की जांच करें। यहां, हमने x1 और x2 घोषित किया है, जो शुरू में क्रमशः संख्या के साथ सेट होते हैं। फिर, सूत्र x1 = x1+ x2 का उपयोग करते हुए, हम x1 और x2 जोड़ते हैं और परिणाम x1 में डालते हैं। यह इंगित करता है कि x1 2 जमा 12 के बराबर है। इसलिए, अब 14 के बराबर है। फिर, हम सूत्र x2 = x1 - x2 लागू करते हैं। यह इंगित करता है कि x2 = 14 - 12. इसलिए, x2 अब 2 के बराबर है। एक बार फिर, हम सूत्र x1 = x1 - x2 लागू करते हैं। यह इंगित करता है कि x1 = 14 - 2। इसलिए, अंत में x1 = 12। इसके चलते नंबर बदल दिए गए हैं।

निम्नलिखित प्रॉम्प्ट स्क्रीन पर पहले और बाद में स्वैप की गई संख्या प्रदर्शित होती है।

निष्कर्ष

यहां, हम C++ में स्वैप () के पूर्ण विवरण, इसके उपयोग और कुछ उदाहरणों पर जाते हैं जो दिखाते हैं कि यह कैसे कार्य करता है। एसटीडी :: स्वैप () फ़ंक्शन का उपयोग करके, दो चर के मानों को स्विच किया जा सकता है। सी ++ एसटीएल में एक अंतर्निहित फ़ंक्शन शामिल है जिसे std::swap() कहा जाता है। स्वैप (टी एंड वेरिएबल 1, टी एंड वेरिएबल 2) फ़ंक्शन संदर्भ द्वारा कॉल करता है, और सी ++ अधिभार स्वैप () डेटा चर के प्रकार के आधार पर भी इस ट्यूटोरियल में समझाया गया है।