Tockra
Lt. Commander
- Registriert
- Dez. 2008
- Beiträge
- 1.063
Hallo Leute,
ich versuche mir gerade mit hilfe eines Buches C++ anzueignen. Da ich aus der Java Ecke komme und recht viel mit Informatik zu tun habe, sind die Datenstrukturen der Container mir nicht gerade Fremd. Allerdings erschließen sich einige Dinge für mich noch nicht so richtig.
Ich weiß, dass es folgende Container gibt:
vector, deque, map, stack, list, set, array, queue , ...
Folgende wurden in dem Buch das ich gelesen habe etwas angeschnitten:
array, vector, list, deque, map.
Leider wurde der Anwendungsbereich und die Implementierung der Container gar nicht wirklich angesprochen. Ja gut ich würde mal Map und Set aus dieser Aussage raus nehmen, da da ja klar ist, was die machen sollen und mir persönlich die Implementierung nicht so wichtig ist, wobei es da ja auch verschiedene Varianten gibt (Stichwort Hash, ...).
Ich würde gerne verstehen, was ein deque sein soll (wurde nur verwendet in meinem Buch, aber nicht erläutert) und wo ich eine Liste benutze und wo einen vector.
Soviel hab ich verstanden: (Vector)
Ein vector ist ein Array, dass eine unbeschränkte größe hat. Mit [x] kann ich auf die reservierten/belegten Indizis zugreifen und mit push_back am Ende neue Element außerhalb des reservierten Bereichs anhängen bzw. mit reserve den Platz vergrößern.
Was mich an dieser Datenstruktur interessiert, wäre zu wissen wie das umgesetzt ist, dass ich alle Elemente dieses Containers hintereinander im Heap finde.
Außerdem interessiert mich, ob beim benutzen von insert der reservierte Bereich vergrößert (muss ja eigentlich).
Ist das das Äquivalent zu einer Arraylist in Java? (Liste mit konstanter Zugriffszeit)
Desweiteren würde mich interessieren wie list implementiert ist ? Ist das das LinkedList Äquivalent und wie teuer ist dort das Einfügen/Löschen/Zugreifen!?
Außerdem interessiert mich wozu der Stack denn nötig ist. Wozu er genutzt wird ist klar, aber ich kann doch einfach einen Vector nehmen, mit der Memberfunktion end() den Iterator vom letzten Element holen und so die Funktion top() ersetzen und push_end() wäre dann das Äquivalent zu push .
Wieso sollte man soetwas nicht einfach machen?
Ich hoffe ich habe euch jetzt nicht mit diesen Fragen erschlagen, aber die Dinger hängen so stark zusammen, dass ich mich gar nicht traue danach zu suchen, da ich da eh nichts finde (schon teilweise probiert).
Gruß
T
ich versuche mir gerade mit hilfe eines Buches C++ anzueignen. Da ich aus der Java Ecke komme und recht viel mit Informatik zu tun habe, sind die Datenstrukturen der Container mir nicht gerade Fremd. Allerdings erschließen sich einige Dinge für mich noch nicht so richtig.
Ich weiß, dass es folgende Container gibt:
vector, deque, map, stack, list, set, array, queue , ...
Folgende wurden in dem Buch das ich gelesen habe etwas angeschnitten:
array, vector, list, deque, map.
Leider wurde der Anwendungsbereich und die Implementierung der Container gar nicht wirklich angesprochen. Ja gut ich würde mal Map und Set aus dieser Aussage raus nehmen, da da ja klar ist, was die machen sollen und mir persönlich die Implementierung nicht so wichtig ist, wobei es da ja auch verschiedene Varianten gibt (Stichwort Hash, ...).
Ich würde gerne verstehen, was ein deque sein soll (wurde nur verwendet in meinem Buch, aber nicht erläutert) und wo ich eine Liste benutze und wo einen vector.
Soviel hab ich verstanden: (Vector)
Ein vector ist ein Array, dass eine unbeschränkte größe hat. Mit [x] kann ich auf die reservierten/belegten Indizis zugreifen und mit push_back am Ende neue Element außerhalb des reservierten Bereichs anhängen bzw. mit reserve den Platz vergrößern.
Was mich an dieser Datenstruktur interessiert, wäre zu wissen wie das umgesetzt ist, dass ich alle Elemente dieses Containers hintereinander im Heap finde.
Außerdem interessiert mich, ob beim benutzen von insert der reservierte Bereich vergrößert (muss ja eigentlich).
Ist das das Äquivalent zu einer Arraylist in Java? (Liste mit konstanter Zugriffszeit)
Desweiteren würde mich interessieren wie list implementiert ist ? Ist das das LinkedList Äquivalent und wie teuer ist dort das Einfügen/Löschen/Zugreifen!?
Außerdem interessiert mich wozu der Stack denn nötig ist. Wozu er genutzt wird ist klar, aber ich kann doch einfach einen Vector nehmen, mit der Memberfunktion end() den Iterator vom letzten Element holen und so die Funktion top() ersetzen und push_end() wäre dann das Äquivalent zu push .
Wieso sollte man soetwas nicht einfach machen?
Ich hoffe ich habe euch jetzt nicht mit diesen Fragen erschlagen, aber die Dinger hängen so stark zusammen, dass ich mich gar nicht traue danach zu suchen, da ich da eh nichts finde (schon teilweise probiert).
Gruß
T