जैसा कि नाम से पता चलता है, C++ STL में copy() मेथड का उपयोग विभिन्न तरीकों से डेटा कॉपी करने के लिए किया जाता है। सभी मेथड्स कार्यक्षमता और पैरामीटर्स में भिन्न होते हैं। ये मेथड्स <algorithm> हेडर फाइल में उपलब्ध हैं। आइए प्रत्येक मेथड और उनकी कार्यक्षमताओं पर चर्चा करें।
copy(start_i1, end_i1, start_i2)
यह मेथड निर्दिष्ट रेंज में एक इटरेटर से दूसरे इटरेटर में डेटा कॉपी करने के लिए उपयोग किया जाता है जहां इटरेटर के प्रारंभ और अंत दोनों तत्व समावेशी (inclusive) होते हैं। यह तीन प्रकार के आर्गुमेंट्स लेता है:
- Start_i1 - यह इटरेटर के प्रारंभिक तत्व को इंगित करता है, मान लें i_1, जहां से तत्व को दूसरे इटरेटर, मान लें i_2, में कॉपी किया जाएगा।
- End_i1 - यह इटरेटर के अंतिम तत्व को इंगित करता है, मान लें i_1, जहां तक तत्व को दूसरे इटरेटर, मान लें i_2, में कॉपी किया जाएगा।
- Start_i2 - यह उस इटरेटर के प्रारंभिक स्थान को इंगित करता है जहां तत्वों को कॉपी किया जाएगा, यानी i_2।
रिटर्न वैल्यू - यह डेस्टिनेशन इटरेटर i_2 के अंत की ओर इंगित करने वाला एक इटरेटर रिटर्न करता है जहां तक तत्व कॉपी किए गए हैं।
उदाहरण
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// वेक्टर v1 बनाना
vector<int> vec_1 = { 10, 20, 30, 40, 50 };
// निर्दिष्ट आकार का खाली वेक्टर घोषित करना
vector<int> vec_2(6);
// copy() फंक्शन का उपयोग करके वेक्टर 2 में कॉपी करना
copy(vec_1.begin(), vec_1.begin() + 4, vec_2.begin());
// नया वेक्टर प्रिंट करना
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < 4; i++) {
cout << vec_2[i] << " ";
}
return 0;
}
आउटपुट
Elements in vector v2 copied from v1: 10 20 30 40
copy_n(start_i1, total, start_i2)
यह मेथड भी एक इटरेटर से दूसरे इटरेटर में डेटा कॉपी करने के लिए उपयोग किया जाता है लेकिन यह कंपाइलर को बताता है कि दिए गए स्थान से शुरू करके कुल कितने तत्वों को कॉपी करने की आवश्यकता है। यह तीन प्रकार के आर्गुमेंट्स लेता है:
- Start_i1 - यह इटरेटर के प्रारंभिक तत्व को इंगित करता है, मान लें i_1, जहां से तत्व को दूसरे इटरेटर, मान लें i_2, में कॉपी किया जाएगा।
- Total - यह बताता है कि start_i1 द्वारा निर्दिष्ट स्थान से शुरू करके कितने तत्वों को कॉपी किया जाएगा। यह पॉजिटिव और नेगेटिव दोनों इंटीजर ले सकता है लेकिन यदि यह नेगेटिव मान है तो कोई ऑपरेशन नहीं करेगा।
- Start_i2 - यह उस इटरेटर के प्रारंभिक स्थान को इंगित करता है जहां तत्वों को कॉपी किया जाएगा, यानी i_2।
रिटर्न वैल्यू - यह डेस्टिनेशन इटरेटर i_2 के अंत की ओर इंगित करने वाला एक इटरेटर रिटर्न करता है जहां तक तत्व कॉपी किए गए हैं।
उदाहरण
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// वेक्टर v1 बनाना
vector<int> vec_1 = { 10, 20, 30, 40, 50 };
// निर्दिष्ट आकार का खाली वेक्टर घोषित करना
vector<int> vec_2(6);
// copy_n() फंक्शन का उपयोग करके वेक्टर 2 में कॉपी करना
copy_n(vec_1.begin(), 4, vec_2.begin());
// नया वेक्टर प्रिंट करना
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < 4; i++) {
cout << vec_2[i] << " ";
}
return 0;
}
आउटपुट
Elements in vector v2 copied from v1: 10 20 30 40
copy_if(start_i1, end_i1, start_i2, Boolean function)
यह मेथड निर्दिष्ट रेंज में एक इटरेटर से दूसरे इटरेटर में डेटा कॉपी करने के लिए उपयोग किया जाता है जो इस फंक्शन को पास किए गए चौथे आर्गुमेंट में परिभाषित रेंज पर लागू शर्त पर आधारित होता है। यह चार प्रकार के आर्गुमेंट्स लेता है:
- Start_i1 - यह इटरेटर के प्रारंभिक तत्व को इंगित करता है, मान लें i_1, जहां से तत्व को दूसरे इटरेटर, मान लें i_2, में कॉपी किया जाएगा।
- End_i1 - यह इटरेटर के अंतिम तत्व को इंगित करता है, मान लें i_1, जहां तक तत्व को दूसरे इटरेटर, मान लें i_2, में कॉपी किया जाएगा।
- Start_i2 - यह उस इटरेटर के प्रारंभिक स्थान को इंगित करता है जहां तत्वों को कॉपी किया जाएगा, यानी i_2।
- Boolean function - इस फंक्शन में, हम वह शर्त पास करेंगे जिसे हम रेंज पर लागू करना चाहते हैं। चूंकि इस फंक्शन का रिटर्न टाइप बूलियन है, यह true/false रिटर्न करेगा और रिटर्न वैल्यू के आधार पर रेंज के तत्वों को प्रदर्शित किया जाएगा।
रिटर्न वैल्यू - यह डेस्टिनेशन इटरेटर i_2 के अंत की ओर इंगित करने वाला एक इटरेटर रिटर्न करता है जहां तक तत्व कॉपी किए गए हैं।
उदाहरण
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// वेक्टर v1 बनाना
vector<int> vec_1 = { 10, 21, 30, 40, 57 };
// निर्दिष्ट आकार का खाली वेक्टर घोषित करना
vector<int> vec_2(6);
// copy_if() फंक्शन का उपयोग करके वेक्टर 2 में कॉपी करना (केवल सम संख्याएं)
copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i) { return i % 2 == 0; });
// नया वेक्टर प्रिंट करना
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < 4; i++) {
cout << vec_2[i] << " ";
}
return 0;
}
आउटपुट
Elements in vector v2 copied from v1: 10 30 40 0
copy_backward(start_i1, end_i1, end_i2)
यह मेथड निर्दिष्ट रेंज में एक इटरेटर से दूसरे इटरेटर में बैकवर्ड दिशा में डेटा कॉपी करने के लिए उपयोग किया जाता है, जिसका अर्थ है कि इटरेटर अपने आकार के आधार पर अंत में चला जाएगा और उस स्थान से तत्वों को पेस्ट किया जाएगा। यह तीन प्रकार के आर्गुमेंट्स लेता है:
- Start_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() {
// वेक्टर v1 बनाना
vector<int> vec_1 = { 10, 21, 30, 40, 57, 67 };
// निर्दिष्ट आकार का खाली वेक्टर घोषित करना
vector<int> vec_2(6);
// copy_backward() फंक्शन का उपयोग करके वेक्टर 2 में कॉपी करना
copy_backward(vec_1.begin(), vec_1.end(), vec_2.begin() + 5);
// नया वेक्टर प्रिंट करना
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < vec_2.size(); i++) {
cout << vec_2[i] << " ";
}
return 0;
}
आउटपुट
Elements in vector v2 copied from v1: 0 10 21 30 40 0