Tableau dynamique et std::vector
Un tableau dynamique sépare taille logique et capacité allouée et grandit géométriquement.
Qu’est-ce que Tableau dynamique et std::vector ?
Un tableau dynamique sépare taille logique et capacité allouée et grandit géométriquement.
Agrandissez un stockage contigu lors des ajouts.
Points importants
- Définissez les invariants avant les opérations.
- Gérez les cas vide, plein et échec d’allocation.
- Étudiez ensemble complexité et ownership.
Exemples de code C et C++
main.c
#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
C++
main.cpp
#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
Comparaison entre C et C++
C vérifie realloc et ajuste la capacité. std::vector encapsule croissance, destruction, itérateurs et sécurité des exceptions.
C
Structures et opérations sont séparées, avec allocation explicite.
C++
Classes et conteneurs protègent les invariants et les ressources.
Exercices pratiques
Exécutez les deux versions puis modifiez-les pour observer leurs garanties.
- Testez les états vide et plein.
- Implémentez le nettoyage et cherchez les fuites.
- Comparez à un conteneur standard.