वेक्टर और सरणी में अंतर
वेक्टर एक टेम्पलेट क्लास है और केवल C++ का निर्माण है जबकि सरणी बिल्ट-इन भाषा निर्माण है और C और C++ दोनों में मौजूद है।
वेक्टर को लिस्ट इंटरफेस के साथ डायनामिक सरणी के रूप में लागू किया जाता है जबकि सरणी को प्रिमिटिव डेटा टाइप इंटरफेस के साथ स्टैटिकली या डायनामिकली लागू किया जा सकता है।
वेक्टर और सरणी के बीच मुख्य अंतर
| विशेषता | वेक्टर (std::vector) | सरणी (Array) |
|---|---|---|
| आकार | डायनामिक - रनटाइम पर बदला जा सकता है | स्टैटिक - कंपाइल टाइम पर फिक्स्ड |
| रिजर्व स्पेस | reserve() से क्षमता पूर्व-आरक्षित कर सकते हैं | रिजर्व स्पेस नहीं दे सकते |
| प्रकार | क्लास | डेटा प्रकार |
| तत्व प्रकार | कोई भी प्रकार के ऑब्जेक्ट स्टोर कर सकते हैं | केवल सजातीय (homogeneous) मान |
| मेमोरी प्रबंधन | स्वचालित | मैनुअल (डायनामिक के लिए) |
| बाउंड्स चेकिंग | at() मेथड से संभव | कोई बाउंड्स चेकिंग नहीं |
| आकार जानना | size() फंक्शन | sizeof या अलग वेरिएबल |
सरणी के लाभ
- सदस्यों के लिए कुशल रैंडम एक्सेस समर्थन
- सरणी को सॉर्ट करना आसान
- फिक्स्ड संख्या में तत्वों को स्टोर करने के लिए अधिक उपयुक्त
- कम मेमोरी ओवरहेड
- C के साथ संगत
सरणी के नुकसान
- तत्वों को हटाया नहीं जा सकता
- सरणी का डायनामिक निर्माण संभव नहीं (C++ में new/delete के बिना)
- एकाधिक डेटा प्रकार स्टोर नहीं कर सकते
- आकार रनटाइम पर नहीं बदल सकता
- कोई बिल्ट-इन मेथड्स नहीं (push_back, pop_back, आदि)
वेक्टर के लाभ
- वेक्टर का आकार बदला जा सकता है (push_back, pop_back, resize)
- एकाधिक ऑब्जेक्ट्स स्टोर कर सकते हैं (टेम्पलेट के कारण किसी भी प्रकार के)
- वेक्टर से तत्व हटाए जा सकते हैं (erase, clear, pop_back)
- बाउंड्स चेकिंग के लिए at() मेथड
- इटरेटर्स समर्थन
- STL एल्गोरिदम के साथ संगत
- स्वचालित मेमोरी प्रबंधन
- कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर
वेक्टर के नुकसान
- वेक्टर एक ऑब्जेक्ट है, मेमोरी खपत अधिक होती है
- थोड़ा धीमा एक्सेस (बाउंड्स चेकिंग के कारण at() में)
- रिकैलोकेशन पर इटरेटर्स अमान्य हो सकते हैं
कोड उदाहरण
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main() {
// सरणी - फिक्स्ड साइज
int arr[5] = {1, 2, 3, 4, 5};
// arr[5] = 6; // एरर: आउट ऑफ बाउंड्स
// वेक्टर - डायनामिक साइज
vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6); // ठीक है
vec.push_back(7); // ठीक है
cout << "Array size: " << sizeof(arr)/sizeof(arr[0]) << endl;
cout << "Vector size: " << vec.size() << endl;
// वेक्टर में इंसर्शन
vec.insert(vec.begin() + 2, 99); // इंडेक्स 2 पर 99 डालें
// वेक्टर से डिलीशन
vec.erase(vec.begin() + 1); // इंडेक्स 1 हटाएं
return 0;
}
निष्कर्ष
आधुनिक C++ में, std::vector को सरणी पर प्राथमिकता दी जाती है जब तक कि आपके पास बहुत विशिष्ट कारण न हो (जैसे अत्यधिक प्रदर्शन-महत्वपूर्ण कोड जहां हर बाइट मायने रखता है, या C API के साथ इंटरऑपरेबिलिटी)।