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

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

वेक्टर में डायनामिक ऐरे की तरह खुद को ऑटोमैटिकली रीसाइज़ करने की क्षमता होती है। जब कोई एलिमेंट डाला या हटाया जाता है, तो कंटेनर अपने स्टोरेज को ऑटोमैटिकली संभालता है।

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

vector::resize()

वेक्टर resize() का उपयोग इसके साइज़ को बदलने के लिए किया जाता है।

उदाहरण

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v;
    vector<int>::iterator it;
    int c, i;
    while (1) {
        cout << "1. वेक्टर का साइज़" << endl;
        cout << "2. वेक्टर में एलिमेंट डालें" << endl;
        cout << "3. वेक्टर को रीसाइज़ करें" << endl;
        cout << "4. इटरेटर द्वारा दिखाएं" << endl;
        cout << "5. बाहर निकलें" << endl;
        cout << "अपनी पसंद दर्ज करें: ";
        cin >> c;
        switch(c) {
            case 1:
                cout << "वेक्टर का साइज़: ";
                cout << v.size() << endl;
                break;
            case 2:
                cout << "डालने के लिए मान दर्ज करें: ";
                cin >> i;
                v.push_back(i);
                break;
            case 3:
                cout << "वेक्टर एलिमेंट्स रीसाइज़ करें:" << endl;
                v.resize(4);
                break;
            case 4:
                cout << "इटरेटर द्वारा वेक्टर दिखा रहे हैं: ";
                for (it = v.begin(); it != v.end(); it++)
                    cout << *it << " ";
                cout << endl;
                break;
            case 5:
                exit(1);
                break;
            default:
                cout << "गलत पसंद" << endl;
        }
    }
    return 0;
}

आउटपुट

1. वेक्टर का साइज़
2. वेक्टर में एलिमेंट डालें
3. वेक्टर को रीसाइज़ करें
4. इटरेटर द्वारा दिखाएं
5. बाहर निकलें
अपनी पसंद दर्ज करें: 1
वेक्टर का साइज़: 0
...
अपनी पसंद दर्ज करें: 3
वेक्टर एलिमेंट्स रीसाइज़ करें:
अपनी पसंद दर्ज करें: 4
इटरेटर द्वारा वेक्टर दिखा रहे हैं: 1 2 4 5

vector::reserve()

vector reserve() इंगित करता है कि वेक्टर इस तरह बनाया गया है कि यह बिना मेमोरी रीअलोकेट किए कम से कम निर्दिष्ट संख्या में एलिमेंट्स स्टोर कर सकता है।

उदाहरण

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v;
    vector<int>::iterator it;
    int c, i;
    while (1) {
        cout << "1. वेक्टर का साइज़" << endl;
        cout << "2. वेक्टर में एलिमेंट डालें" << endl;
        cout << "3. वेक्टर रिज़र्व करें" << endl;
        cout << "4. इटरेटर द्वारा दिखाएं" << endl;
        cout << "5. बाहर निकलें" << endl;
        cout << "अपनी पसंद दर्ज करें: ";
        cin >> c;
        switch(c) {
            case 1:
                cout << "वेक्टर का साइज़: ";
                cout << v.size() << endl;
                break;
            case 2:
                cout << "डालने के लिए मान दर्ज करें: ";
                cin >> i;
                v.push_back(i);
                break;
            case 3:
                cout << "वेक्टर एलिमेंट्स रिज़र्व करें:" << endl;
                v.reserve(100);
                break;
            case 4:
                cout << "इटरेटर द्वारा वेक्टर दिखा रहे हैं: ";
                for (it = v.begin(); it != v.end(); it++) {
                    cout << *it << " ";
                }
                cout << endl;
                break;
            case 5:
                exit(1);
                break;
            default:
                cout << "गलत पसंद" << endl;
        }
    }
    return 0;
}

आउटपुट

1. वेक्टर का साइज़
2. वेक्टर में एलिमेंट डालें
3. वेक्टर रिज़र्व करें
4. इटरेटर द्वारा दिखाएं
5. बाहर निकलें
अपनी पसंद दर्ज करें: 3
वेक्टर एलिमेंट्स रिज़र्व करें:
अपनी पसंद दर्ज करें: 4
इटरेटर द्वारा वेक्टर दिखा रहे हैं: 1 2 3 4 5

तुलना तालिका

विशेषता resize() reserve()
साइज़ बदलता है हां नहीं
क्षमता बदलता है हो सकता है हां (कम से कम निर्दिष्ट मान तक)
नए एलिमेंट्स इनिशियलाइज़ करता है हां (डिफ़ॉल्ट मान से) नहीं
एलिमेंट्स हटा सकता है हां (यदि नया साइज़ छोटा है) नहीं
इटरेटर्स अमान्य करता है हां (यदि रीअलोकेशन होता है) हां (यदि रीअलोकेशन होता है)

कब क्या उपयोग करें?

  • resize(): जब आपको वास्तव में वेक्टर का साइज़ बदलना हो और नए एलिमेंट्स की आवश्यकता हो
  • reserve(): जब आप जानते हैं कि लगभग कितने एलिमेंट्स होंगे और रीअलोकेशन से बचना चाहते हैं (परफॉर्मेंस ऑप्टिमाइज़ेशन)
  1. - C++ में वेक्टर से सबवेक्टर कैसे प्राप्त करें?

    यह C++ में वेक्टर से सबवेक्टर प्राप्त करने का प्रोग्राम है। एल्गोरिदम शुरुआत s को वेक्टर s(vector const &v, int m, int n) के रूप में घोषित करें ताकि वेक्टर की शुरुआत और अंत की पोजीशन को कंस्ट्रक्टर में इनिशियलाइज़ किया जा सके auto first = v.begin() + m auto last = v.begin() + n + 1

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

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

  1. - C++ में टाइप इन्फरेंस (प्रकार निगमन)

    टाइप इन्फरेंस या डिडक्शन का अर्थ है प्रोग्रामिंग भाषा में एक एक्सप्रेशन के डेटा टाइप का ऑटोमैटिक डिटेक्शन। यह कुछ स्ट्रॉन्गली स्टैटिकली टाइप्ड भाषाओं में मौजूद एक विशेषता है। C++ में, auto कीवर्ड (C++11 में जोड़ा गया) ऑटोमैटिक टाइप डिडक्शन के लिए उपयोग किया जाता है। उदाहरण के लिए, आप एक वेक्टर पर पु