Verwendung der Template-KLasse vector aus der Standard-Template-Library (STL)
Viele Arten an Container-Klassen samt Template-Mechanismus zur Anpassung des verwalteten Datentyps stehen in der Standard-Template-Library schon zu Verfügung und müssen nicht selber programmiert werden. Jedoch waren die vorangegangenen Ausführungen notwendig, um diese Mechanismen auch zu verstehen und um im entscheidenden Moment, wo Standardlösungen nicht mehr greifen, eigene Containerklassen und Templates, auch unabhängig voneinander erstellen zu können. Allerdings sollen Sie auch nicht von der Erkenntnis verschont werden, wie ungemein viel Programmierarbeit man sich sparen kann, wenn man die richtigen Libraries zur Verfügung hat. Gerade darin liegt die Stärke der OOP.
An dieser Stelle wird ein letztes mal das Beispiel mit der Textzerlegung aufgegriffen, wobei diesmal keine eigene Klasse für das Verwalten der einzelnen Wörter (String-Objekte) geschrieben wird. Statt dessen wird die Klasse vector verwendet. Es handelt sich hierbei, wie der Name schon andeutet, um eine Vektor-Container-Klasse, bei der also der allokierte Speicherbereich zusammenhängt und aus der heraus deshalb schneller einzelne Elemente angesprochen werden können, als das bei Listen der Fall war (vergl. Kapitel 5 Containertypen).
Hier zunächst ohne weitere Erläuterungen der Programmcode. Er besteht diesmal nur aus einer einzigen C++-Datei, ohne zusätzliche eigene include-Dateien:
#include <string> #include <iostream> #include <vector> using namespace std; bool istTrennzeichen(char zeichen, string trennzeichen) { for(int i=0;i<trennzeichen.size();i++) { if(zeichen == trennzeichen.at(i)) return true; } return false; } void zerlegeText(vector<string>* mLC,string text,string trennzeichen) { int wortbeginn = 0; int wortende = 0; for(int i=0;i<text.size();i++) { if( !istTrennzeichen(text.at(i),trennzeichen) ) { wortbeginn = i; while( i+1<text.size() && !istTrennzeichen(text.at(i+1),trennzeichen) ) i++; wortende = i; mLC->push_back(text.substr(wortbeginn,wortende-wortbeginn+1)); } } } int main(void) { string text = "Das ist ein Text."; string trennzeichen = ".,;: "; vector<string> mLC; zerlegeText(&mLC,text,trennzeichen); cout<<"GROESSE der Liste="<<mLC.size()<<endl; for(int i=0;i<mLC.size();i++) cout<<"Wort Nr."<<i<<":"<<mLC.at(i)<<endl; }
Code 0-1: zerlegetext_mitvector.cpp

Erläuterungen zur Verwendung der Klasse vector
Die Verwendung von vector läuft ganz analog zu der Verwendung der selber programmierten Klasse ContainerListeT: Beim Erzeugen eines Objektes muss man hinter dem Klassentyp in spitzen Klammern noch angeben, von welchem Typ die im Vektor zu speichernden Elemente sein sollen.
Objekte der Klasse vector besitzen eine ganze Reihe an hilfreichen Methoden, um die
darin gespeicherten Elemente auszulesen, oder zu manipulieren, viel mehr als
wir für ContainerListeT programmiert haben. Einge seien hier angeführt, alle weiteren
sind der C++-Referenz unter
www.cppreference.com
zu entnehmen.
Methode | Beschreibung |
---|---|
int size() | Liefert die Anzahl der im vector-Objekt gespeicherten Elemente zurück. |
at(int) | Liefert das i-te Element zurück (ohne den Inhalt des Vektor-Objektes zu verändern). |
clear() | Löscht alle Elemente im Vektor-Objekt |
push_back(<vector-TYP>) | Fügt an das Ende der Liste der schon gespeicherten Elemente ein weiteres an, allokiert nötigenfalls weiteren Speicher. |
insert(int i,<vector-TYP> e) | Fügt das übergebene Element e vor dem i-ten schon gespeicherten Element an. |
erase(int) | Löscht das i-te gespeicherte Element |
Tabelle 0-1: Methoden der Objekte vom Typ vector aus der STL.