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

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


जैसा कि नाम से पता चलता है, 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

  1. - C++ में std::vector::resize() और std::vector::reserve() का अंतर

    वेक्टर में डायनामिक ऐरे की तरह खुद को ऑटोमैटिकली रीसाइज़ करने की क्षमता होती है। जब कोई एलिमेंट डाला या हटाया जाता है, तो कंटेनर अपने स्टोरेज को ऑटोमैटिकली संभालता है। vector::resize() और vector::reserve() के बीच मुख्य अंतर यह है कि resize() वेक्टर का साइज़ बदलने के लिए उपयोग किया जाता है जबकि rese

  1. - C++ STL में Vector का कार्यान्वयन

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

  1. - C++ STL का उपयोग करके कस्टम ऑब्जेक्ट्स के वेक्टर को सॉर्ट करना

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