PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was macht dieser Code?


ethrandil
2003-01-03, 18:03:58
Ich lese mir hier gerade etwas code durch, und habe etwas für mich unbekanntest gefunden... könntet ihr mir erklären was das macht, was das soll?

for (vector<AOc>::iterator it = aoc.begin();it != aoc.end();it++)

Danke.

Elemental
2003-01-03, 18:11:19
Du hast einen einen Vektor auf den du in der for Schleife zugreifen kannst. Der Iterator wird dabei in der for-anweisung von 1. bis zum letzten Element "durchgezählt".
In Inhalt der for-Schleife musst du dann mit den einzelnen Elementen des Vektors, auf die der Iterator gerade zeigt, arbeiten.

Verständlich? Bin nicht so gut im erklären :|

mfG
Elemental

edit:
Ein Iterator ist ein Zeiger auf ein Element eines Vektors.
Die end()-Methode liefert einen Zeiger zurück, der nach das letzte Element des Vektors zeigt.


for (vector<AOc>::iterator it = aoc.begin();it != aoc.end();it++)


it = aoc.begin(); //weisst einen Zeiger auf das erste Element zu
it!=aoc.end(); //damit sagst du, dass der iterator nur solange "erhöht" werden soll, bis du am Ende des Vektors angekommen bist

Hope this helps.

ethrandil
2003-01-03, 18:26:14
was eine forschleife ist weiß ich ;)
aber

vector<AOc>::iterator it

macht mich stutzig!

Xmas
2003-01-03, 18:41:00
Originally posted by ethrandil
Ich lese mir hier gerade etwas code durch, und habe etwas für mich unbekanntest gefunden... könntet ihr mir erklären was das macht, was das soll?

for (vector<AOc>::iterator it = aoc.begin();it != aoc.end();it++)

Danke.

Jaja, die lustige Welt der STL... ;)

vector<> ist ein Template für Vektoren. Was man in den spitzen Klammern angibt ist der Datentyp der Elemente. Diese Vektoren haben keine feste Größe, sie können beliebig viele Elemente umfassen.

vector<int> wäre z.B. ein Vektor, der aus Integer-Elementen besteht.
vector<AOc> ist ein Vektor, der aus Elementen vom Typ AOc besteht.

aoc ist hier vom Typ vector<AOc>

vector<AOc>::iterator ist ein Datentyp, nämlich ein Iterator für einen Vektor mit AOc-Elementen.
Iteratoren sind ein wichtiges Konzept der STL (Standard Template Library), sie vereinheitlichen den Zugriff auf Elemente beliebig gearteter "Collections". Sie sind Pointern ähnlich, aber z.B. das Hochzählen (it++) funktioniert auch dann wenn die einzelnen Elemente im Speicher nicht aufeinander folgen, wie es bei einem Array der Fall ist.

it ist hier also vom Typ vector<AOc>::iterator. Mit it = aoc.begin() zeigt it auf das erste Element des Vektors aoc. Durch it++ zeigt it auf das jeweils darauffolgende Element. Auf das Element selbst greift man zu, als sei it ein Pointer, also mit *it.


Hier mal ein Beispiel: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vcsampSamplevectorCCpushbackandvectorCCpopbackSTLSample.asp

ethrandil
2003-01-03, 18:49:22
Jetzt weiß ich wieder, warum ich das Kapitel "Templates" überlesen habe ....

Nasenbaer
2003-01-03, 20:43:23
@Xmas

Das hört sich irgendwie nach dem Konzept einer verketteten Liste an. Sind Vectoren und dieses klassische Zeiger-Beispiel miteinander prinzipiell vergleichbar?

Mfg Nasenbaer

Xmas
2003-01-03, 21:08:09
Originally posted by Nasenbaer
@Xmas

Das hört sich irgendwie nach dem Konzept einer verketteten Liste an. Sind Vectoren und dieses klassische Zeiger-Beispiel miteinander prinzipiell vergleichbar?

Mfg Nasenbaer
Nein, diese Vektoren sind dynamische Arrays. Für verkettete Listen gibt es list<>. Dank der Iteratoren ist der Zugriff auf Elemente aber identisch. Man wählt einfach die Form, die den Ansprüchen am ehesten gerecht wird (z.B. Linked List: Schnelles Einfügen, Löschen, aber langsames "Springen"; Vector: praktisch das Gegenteil), und greift dann per Iterator darauf zu.