Tablice są bardzo użyteczną i powszechną strukturą danych. Są nieskomplikowane i zapewniają bardzo krótki czas dostępu. Mają jednak pewne ograniczenia. W szczególności mają stały rozmiar, więc zawsze trzeba się upewniać, że pozostajemy w ich granicach.
Tablica dynamiczna przypomina zwykłą tablicę, tyle tylko, że może dynamicznie zmieniać swój rozmiar. Jeśli wstawiamy element poza granicami tablicy, wówczas tablica automatycznie rośnie. Nie trzeba więc martwić się o to, czy indeks nie wykracza poza graniczną wartość, ani samodzielnie ponownie przydzielać pamięć dla tablicy. Tablica dynamiczne wszystko wykonuje sama.
Utworzyliśmy klasę tablic dynamicznych z dwóch klas. Pierwsza z nich, Drgbase, jest klasą roboczą. Zawiera wszystkie funkcje indeksujące, kopiujące i rozszerzające tablicę. Działa ona na wskaźnikach void, więc można jej używać ze wszystkimi typami. Oczywiście wskaźniki void nie zapewniają bezpieczeństwa pod względem zgodności typów, jest więc też druga klasa, Drg, tworzona z szablonu i będąca klasą pochodną klasy Drgbase. Dodaje do funkcji tablic dynamicznych interfejsy zapewniające zgodność typów.
Warto zwrócić uwagę na to, że wszystkie operacje są wykonywane w klasie Drgbase. Dzięki temu dodanie interfejsów tworzonych z szablonu tylko nieznacznie zwiększa kod. Wszystkie klasy zbudowane na szablonie używają wspólnego kodu z klasy podstawowej (zobacz wskazówkę 107.).
Zostało przeciążonych wiele operatorów klasy, aby jej użycie stało się bardziej naturalne. Na przykład podany fragment kodu z pliku exp.cpp znajdującego się na CD-ROM-ie dołączonym do książki, przechodzi przez dynamiczną tablicę znaków:
void BuildStack(Stack<char> &st, Drg <char>&drg)
char eh; drg = 0;
while(ch = *drg++)
st.Push(ch);
Następujący fragment, również z pliku exp.cpp, ustawia wartości wewnątrz dynamicznej tablicy:
Drg <char>drg;
char *pch;
int i = 0;
pch = sz;
while(drg[i] = *pch++) i++;