Dynamic Array और std::vector
Values append होने पर contiguous storage बढ़ाएँ।
Dynamic Array और std::vector क्या है?
Dynamic array logical size को capacity से अलग रखकर geometrically grow करता है।
महत्वपूर्ण बातें
- Operations से पहले invariants तय करें।
- Empty, full और allocation-failure cases संभालें।
- Complexity और ownership साथ मापें।
देखें यह कैसे काम करता है
push_back कई बार दबाएँ। ऐरे भर जाने पर वह दोगुना बड़ा ब्लॉक लेता है और सब कुछ उसमें कॉपी करता है।
C और C++ code examples
#include <stdio.h>
#include <stdlib.h>
int main(void) {
size_t size = 0, capacity = 2;
int *values = malloc(capacity * sizeof *values);
if (!values) return 1;
for (int value = 1; value <= 5; ++value) {
if (size == capacity) {
capacity *= 2;
int *grown = realloc(values, capacity * sizeof *values);
if (!grown) {
free(values);
return 1;
}
values = grown;
}
values[size++] = value * value;
}
printf("size=%zu capacity=%zu last=%d\n",
size, capacity, values[size - 1]);
free(values);
}
size=5 capacity=8 last=25
#include <iostream>
#include <vector>
int main() {
std::vector<int> values;
for (int value = 1; value <= 5; ++value) {
values.push_back(value * value);
}
std::cout << "size=" << values.size()
<< " last=" << values.back() << '\n';
}
size=5 last=25
C और C++ की तुलना
C realloc failure और capacity संभालता है; std::vector growth, destruction, iterators और exception safety package करता है।
Structures और operations अलग, allocation स्पष्ट होता है।
Classes और containers invariants और resources manage करते हैं।
अभ्यास
दोनों versions चलाकर बदलें और language guarantees की तुलना करें।
- Empty और capacity boundary tests जोड़ें।
- Cleanup लागू कर leaks जाँचें।
- Standard container से तुलना करें।
चैलेंज से अभ्यास करें
इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।
- ऐरे घुमाएँ सूची को दाएँ ओर कुछ चरणों तक घुमाएँ। आसान
- डायनेमिक ऐरे का बढ़ना एक dynamic array के capacity को दोगुना होने के तरीके का अनुकरण करें और reallocations तथा copied elements की गिनती करें. आसान