PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c++/STL "geschlossener" list-Container



cgogolin
22-07-2008, 07:53
Hallo,

ich brauche ein Container-Klasse die sich genau so verhält wie list aus der STL mit dem einzigen Unterschied, das die Beiden Enden der List "geschlossen" sein sollen.

Das heißt, dass ein ++ auf einen Iterator auf das letzten Element der Liste einen Iterator auf das erste Element zurück liefern soll und nicht end() und umgekehrt ein -- auf den begin() Iterator einen Iterator auf das letzte Element liefert.

Da list als double linked list implementiert ist scheint mir das eingentlich eine einfache Sache zu sein. Man müsste nur die Methode zum Einfügen von Knoten in die Liste so abwandeln, dass den next-Poiter des letzten Elements auf das erste zeigen lässt und den previous-Poiter des erten auf das letzte Element zeigen lässt.

Leider kenne ich mich mit den STL Interna nicht gut genug aus. Und wenn ich anfange darin rum zu würchen mache ich bestimmt nur alles kaputt...

Kann mir jemand sagen wo ich ansetzen müsset, bzw. welche Methode der list-Klasse ich verändern müsste?

anda_skoa
22-07-2008, 13:57
Ich denke du suchst am ehesten einen Circular Iterator:
http://www.noveltheory.com/Iterators/Iterator_N0.htm

Falls du wirklich eine zirkuläte Liste haben willst, findest du hier etwas:
http://cppcorner.3x.ro/circularlist.html

Ciao,
_

locus vivendi
22-07-2008, 15:04
Seit Version 1.35 bietet Boost etwas, was sich "Circular Buffer" nennt. Habe ich selber noch nie benutzt, aber laut Beschreibung scheint diese Bibliothek deinen Bedürfnissen zu entsprechen.

http://www.boost.org/users/news/version_1_35_0
Gleich der dritte Eintrag unter "New Libraries".

cgogolin
24-07-2008, 20:21
Der tipp mit dem Iterator war super! Daran hatte ich gar nicht gedacht. Jetzt kann ich je nach bedarf zyklisch oder linear ober die list iterieren.

Danke!