le std::vector fait ça très bien
exemple :
std::vector<int> t; // t tableau d'entier, vide
t.resize(42); // t fait 42 cases
t.resize(78); maintenant il en fait 78;
t[20] = 1; // acces à la case 20
int* q = &(t[0]);
q[20] = 1; // ça marche aussi, int* comme en C