Jos säiliöluokka on määritelty omaksi tyypikseen, ei yleensä tarvitse kajota itse ohjelmaan lainkaan, vaikka myöhemmin tarvitsee vaihtaa säiliöluokan fyysistä rakennetta.
Seuraavassa on tarkoituksena tallettaa kirjaimia. Talletustavoiksi on valittu järjestetty taulukko toteutettuna vektorina ja pino toteutettuna listana. Koska nämä tavat ovat täysin keskenään erilaisia, on samaistus suoritettu muutaman makron avulla.
Esimerkiksi vektorin alustus tarvitsee parametrikseen vektorin maksimikoon ja restart -metodi läpikäytävien alkioiden lukumäärän. Pinossa kumpikin ominaisuus on tarpeeton ja ne on määritelty #define:n avulla tyhjiksi. Lisäksi lisäysfunktion nimi on erilainen pinossa ja taulukossa. Lyhenne ADT kuvaa termiä Abstract Data Type.
/* LISTCL24.CPP */
// Esimerkki Container-luokan ja iteraattorin käytöstä, BC 4.52
#include <iostream.h>
#if 0
#include <classlib\bags.h>
typedef TBagAsVector<char> ADTchar;
typedef TBagAsVectorIterator<char> ITchar;
#define SIZE (2)
#endif
#if 1
#include <classlib\sets.h>
typedef TSetAsVector<char> ADTchar;
typedef TSetAsVectorIterator<char> ITchar;
#define SIZE (2)
#endif
#if 0
#include <classlib\arrays.h>
typedef TSArrayAsVector<char> ADTchar;
typedef TSArrayAsVectorIterator<char> ITchar;
#define SIZE (5)
#endif
#if 0
#include <classlib\stacks.h>
typedef TStackAsList<char> ADTchar;
typedef TStackAsListIterator<char> ITchar;
#define Add Push
#define SIZE
#endif
void tulosta(char &c,void *)
{
cout << c << " ";
}
#define VIIVA "------------------------------------------------------------\n"
/****************************************************************************/
int main(void)
{
cout << VIIVA;
ADTchar lc SIZE;
lc.Add('a'); lc.Add('i'); lc.Add('e');
lc.Add('d'); lc.Add('d'); lc.Add('d'); lc.Add('d');
ITchar lci(lc);
for (lci.Restart(); lci != 0; lci++)
cout << lci.Current() << " ";
cout << "|\n" << VIIVA;
lc.ForEach(tulosta,NULL);
cout << "|\n" << VIIVA;
return 0;
}
Edellä tietorakenteen läpikäynti (= kaikkien alkioiden tulostus)
on suoritettu kahdella eri tavalla. Iteraattorin avulla ja talletusluokan
forEach -metodin avulla. forEach -metodi tarvitsee
parametrikseen funktion osoitteen, jota sitten kutsutaan jokaisella
tietorakenteeseen talletetulla alkiolla. Funktiolle voidaan
välittää olion lisäksi parametrina yksi osoite, jonka
avulla voidaan suorittaa tarvittavia laajempia
parametrinvälitystehtäviä jos globaaleja muuttujia halutaan
välttää (niinkuin pitäisi).