वेक्टर में डायनामिक ऐरे की तरह खुद को ऑटोमैटिकली रीसाइज़ करने की क्षमता होती है। जब कोई एलिमेंट डाला या हटाया जाता है, तो कंटेनर अपने स्टोरेज को ऑटोमैटिकली संभालता है।
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(): जब आप जानते हैं कि लगभग कितने एलिमेंट्स होंगे और रीअलोकेशन से बचना चाहते हैं (परफॉर्मेंस ऑप्टिमाइज़ेशन)