Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ STL में कॉपी करने के विभिन्न तरीके - std::copy (), copy_n (), copy_if (), copy_backwards ()


जैसा कि विधि के नाम से पता चलता है कि C++ STL में उपलब्ध विभिन्न विधियों के माध्यम से डेटा को कॉपी करने के लिए कॉपी () विधि का उपयोग किया जाता है। सभी विधियाँ कार्यक्षमता और मापदंडों में भिन्न हैं। ये तरीके <एल्गोरिदम> हेडर फाइल में उपलब्ध हैं। आइए प्रत्येक विधि और उनकी कार्यप्रणाली पर चर्चा करें।

कॉपी करें(start_i1, end_i1, start_i2)

इस विधि का उपयोग डेटा को एक इटरेटर से दूसरे इटरेटर में निर्दिष्ट सीमा के भीतर कॉपी करने के लिए किया जाता है जहां एक इटरेटर के प्रारंभ और अंत दोनों तत्व शामिल होते हैं। इसमें तीन तरह के तर्क होते हैं यानी -

  • प्रारंभ_i1 - यह पुनरावर्तक के प्रारंभिक तत्व को इंगित करेगा, मान लीजिए, i_1 जहां से तत्व को किसी अन्य पुनरावर्तक में कॉपी किया जाएगा, मान लीजिए, i_2।

  • End_i1 - यह पुनरावर्तक के अंतिम तत्व को इंगित करेगा, मान लीजिए, i_1 जब तक तत्व को किसी अन्य पुनरावर्तक में कॉपी नहीं किया जाएगा, मान लीजिए, i_2।

  • प्रारंभ_i2 - यह एक पुनरावर्तक के प्रारंभिक स्थान को इंगित करेगा जहां तत्वों की प्रतिलिपि बनाई जाएगी यानी i_2।

वापसी मूल्य - यह गंतव्य इटरेटर के अंत की ओर इशारा करते हुए एक इटरेटर लौटाएगा यानी i_2 जहां तक ​​तत्वों की प्रतिलिपि बनाई गई है।

उदाहरण

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy() function to copy in vector 2
   copy(vec_1.begin(), vec_1.begin()+4, vec_2.begin());
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

आउटपुट

इस कोड का आउटपुट होगा -

Elements in vector v2 copied from v1: 10 20 30 40

copy_n(start_i1, कुल, start_i2)

इस विधि का उपयोग डेटा को एक इटरेटर से दूसरे इटरेटर में कॉपी करने के लिए भी किया जाता है, लेकिन यह कंपाइलर को बताता है कि किसी दिए गए स्थान से शुरू होने वाले कुल कितने तत्वों को कॉपी करने की आवश्यकता है। इसमें तीन तरह के तर्क होते हैं यानी—

  • प्रारंभ_i1 - यह पुनरावर्तक के प्रारंभिक तत्व को इंगित करेगा, मान लीजिए, i_1 जहां से तत्व को किसी अन्य पुनरावर्तक में कॉपी किया जाएगा, मान लीजिए, i_2।

  • कुल - यह बताता है कि start_i1 द्वारा निर्दिष्ट स्थान से कितने तत्वों की प्रतिलिपि बनाई जाएगी। यह धनात्मक और ऋणात्मक दोनों पूर्णांक ले सकता है लेकिन ऋणात्मक मान होने पर यह कोई संक्रिया नहीं करेगा।

  • प्रारंभ_i2 - यह एक पुनरावर्तक के प्रारंभिक स्थान को इंगित करेगा जहां तत्वों की प्रतिलिपि बनाई जाएगी यानी i_2।

वापसी मूल्य - यह गंतव्य इटरेटर के अंत की ओर इशारा करते हुए एक इटरेटर लौटाएगा यानी i_2 जहां तक ​​तत्वों की प्रतिलिपि बनाई गई है।

उदाहरण

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_n() function to copy in vector 2
   copy_n(vec_1.begin(), 4, vec_2.begin());
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

आउटपुट

इस कोड का आउटपुट होगा -

Elements in vector v2 copied from v1: 10 20 30 40

copy_if(start_i1, end_i1, start_i2, बूलियन फंक्शन)

इस विधि का उपयोग उस सीमा पर लागू शर्त के आधार पर निर्दिष्ट सीमा के भीतर एक पुनरावर्तक से दूसरे पुनरावर्तक में डेटा की प्रतिलिपि बनाने के लिए किया जाता है जिसे इस फ़ंक्शन को दिए गए चौथे तर्क में परिभाषित किया जाएगा। इसमें चार तरह के तर्क होते हैं यानी—

  • प्रारंभ_i1 - यह पुनरावर्तक के प्रारंभिक तत्व को इंगित करेगा, मान लीजिए, i_1 जहां से तत्व को किसी अन्य पुनरावर्तक में कॉपी किया जाएगा, मान लीजिए, i_2।

  • End_i1 - यह पुनरावर्तक के अंतिम तत्व को इंगित करेगा, मान लीजिए, i_1 जब तक तत्व को किसी अन्य पुनरावर्तक में कॉपी नहीं किया जाएगा, मान लीजिए, i_2।

  • प्रारंभ_i2 &मिनबस; यह एक पुनरावर्तक के प्रारंभिक स्थान को इंगित करेगा जहां तत्वों की प्रतिलिपि बनाई जाएगी यानी i_2।

  • बूलियन फ़ंक्शन - इस फ़ंक्शन में, हम उस शर्त को पारित करेंगे जिसे हम सीमा पर लागू करना चाहते हैं। चूंकि इस फ़ंक्शन का रिटर्न प्रकार बूलियन है, यह सही/गलत लौटाएगा और वापसी मूल्य के आधार पर श्रेणी तत्व प्रदर्शित किए जाएंगे।

वापसी मूल्य - यह गंतव्य इटरेटर के अंत की ओर इशारा करते हुए एक इटरेटर लौटाएगा यानी i_2 जहां तक ​​तत्वों की प्रतिलिपि बनाई गई है।

उदाहरण

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 21, 30, 40, 57 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_if() function to copy in vector 2
   copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i){return i%2==0;});
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

आउटपुट

इस कोड का आउटपुट होगा -

Elements in vector v2 copied from v1: 10 30 40 0

copy_backwards(start_i1, end_i1, end_i2)

इस पद्धति का उपयोग एक पुनरावर्तक से दूसरे पुनरावर्तक में डेटा को पीछे की दिशा में निर्दिष्ट सीमा के भीतर कॉपी करने के लिए किया जाता है, जिसका अर्थ है कि पुनरावर्तक को उसके आकार के आधार पर अंत तक ले जाया जाएगा और उस स्थान से तत्वों को चिपकाया जाएगा। इसमें तीन तरह के तर्क होते हैं यानी—

  • प्रारंभ_i1 - यह पुनरावर्तक के प्रारंभिक तत्व को इंगित करेगा, मान लीजिए, i_1 जहां से तत्व को किसी अन्य पुनरावर्तक में कॉपी किया जाएगा, मान लीजिए, i_2।

  • End_i1 - यह पुनरावर्तक के अंतिम तत्व को इंगित करेगा, मान लीजिए, i_1 जब तक तत्व को किसी अन्य पुनरावर्तक में कॉपी नहीं किया जाएगा, मान लीजिए, i_2।

  • end_i2 - यह एक पुनरावर्तक के अंतिम स्थान को इंगित करेगा जहां तत्वों की प्रतिलिपि बनाई जाएगी यानी i_2।

वापसी मूल्य - यह गंतव्य इटरेटर के शुरुआती तत्व की ओर इशारा करते हुए एक पुनरावर्तक लौटाएगा यानी i_2 जहां तक ​​तत्वों की प्रतिलिपि बनाई गई है।

उदाहरण

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 21, 30, 40, 57,67 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_backward() function to copy in vector 2
   copy_backward(vec_1.begin(), vec_1.end()+4, vec_2.begin()+5);
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<vec_2.size(); i++){
      cout<<vec_2[i] << " ";
   }
}

आउटपुट

इस कोड का आउटपुट होगा -

Elements in vector v2 copied from v1: 0 10 21 30 40 0

  1. std::vector::resize() बनाम std::vector::reserve() सी++ में

    जब कोई तत्व डाला या हटाया जाता है, तो वेक्टर स्वचालित रूप से गतिशील सरणी की तरह आकार बदलने की क्षमता रखता है, कंटेनर स्वचालित रूप से अपने भंडारण को संभालता है। वेक्टर आकार () और वेक्टर रिजर्व () के बीच मुख्य अंतर यह है कि आकार बदलने () का उपयोग वेक्टर के आकार को बदलने के लिए किया जाता है जहां रिजर्

  1. एसटीएल में वेक्टर लागू करने के लिए सी++ प्रोग्राम

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

  1. सी ++ एसटीएल का उपयोग कर कस्टम ऑब्जेक्ट्स के वेक्टर को सॉर्ट करना

    आप C++ STL फ़ंक्शन std::sort का उपयोग करके कस्टम ऑब्जेक्ट के वेक्टर को सॉर्ट कर सकते हैं। सॉर्ट फ़ंक्शन में एक अतिभारित रूप होता है जो पहले, अंतिम, तुलनित्र तर्क के रूप में लेता है। पहले और आखिरी कंटेनर के पहले और आखिरी तत्वों के इटरेटर हैं। तुलनित्र एक विधेय कार्य है जिसका उपयोग यह बताने के लिए किय