C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Iteratoren auf Listen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Martin Herrmann
Guest





PostPosted: Fri Dec 03, 2004 9:20 pm    Post subject: Iteratoren auf Listen Reply with quote



Hallo,

ich habe zwei Fragen zur STL-Iteratoren, zu denen ich auch
erstaunlicherweise keine Literatur im WWW finde - vielleicht fehlen mir
einfach die richtigen Suchbegriffe.

1.: Ich möchte eine Liste von Punkten (class Punkt) sowie eine Liste von
Punktpaaren (class Punktpaar) speichern. Diese Punktpaare sollen dabei
nicht den Wert des Punkts sondern einen Verweis auf ein Element der
Punktliste speichern.
In C würde ich das als Array von Punkten und Array von Punktpaaren
machen, wobei ein Punktpaar aus zwei Zeigern auf Punkte besteht.

In C++ wäre mein Ansatz:
class Punktpaar
{
// [...]
list<Punkt>::iterator p1, p2;
}
list<Punkt> punkt_liste;
list<Punktpaar> punktpaar_liste;

Also wie bei C, nur Listen (STL list) statt Arrays und Iteratoren statt
Zeigern. Ist dieser Ansatz so brauchbar oder gibt es einen anderen,
üblichen Ansatz?


2.: ich möchte ein Element zu einer Liste hinzufügen und dann
einen Iterator haben, der auf dieses Element zeigt.
liste.back () gibt mir den Wert des Elements, also nicht das, was ich
möchte.
liste.end () gibt mir einen Iterator, der *hinter* das letzte Element
zeigt. Mit operator-- könnte ich diesen jetzt auf das letzte Element
zurückverschieben. Allerdings ist das ein gewisser "Umweg".

Gibt es eine andere Möglichkeit, einen Iterator auf entweder das letzte
Element der Liste oder auf das zuletzt hinzugefügte Element zu erhalten?


Gruß,
Martin

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Jw. Apri
Guest





PostPosted: Sun Dec 05, 2004 10:08 am    Post subject: Re: Iteratoren auf Listen Reply with quote



Martin Herrmann wrote:

Quote:
1.: Ich möchte eine Liste von Punkten (class Punkt) sowie eine Liste von
Punktpaaren (class Punktpaar) speichern. Diese Punktpaare sollen dabei
nicht den Wert des Punkts sondern einen Verweis auf ein Element der
Punktliste speichern.

[snip]

Quote:
class Punktpaar
{
// [...]
list<Punkt>::iterator p1, p2;
}
list<Punkt> punkt_liste;
list<Punktpaar> punktpaar_liste;


warum auch nicht - und noch besser als Punktpaar wäre
std::pair<list

std::list<std::pair >
punktpaar_liste;

Quote:
2.: ich möchte ein Element zu einer Liste hinzufügen und dann
einen Iterator haben, der auf dieses Element zeigt.

die push()s liefern keine iterator, dafür aber insert(). für push_back()
also insert(punkt_liste.end(), ...) und für push_front()
insert(punkt_liste.begin(), ...) nehmen.

Quote:
liste.end () gibt mir einen Iterator, der *hinter* das letzte Element
zeigt. Mit operator-- könnte ich diesen jetzt auf das letzte Element
zurückverschieben. Allerdings ist das ein gewisser "Umweg".

oder einfach (punkt_liste.end() - 1) - mit iteratoren kann man auch rechnen.

--
jw. apri

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Thomas Maeder
Guest





PostPosted: Sun Dec 05, 2004 10:34 am    Post subject: Re: Iteratoren auf Listen Reply with quote



Martin Herrmann <martin.herrmann (AT) stud (DOT) uni-karlsruhe.de> writes:

Quote:
1.: Ich möchte eine Liste von Punkten (class Punkt) sowie eine Liste von
Punktpaaren (class Punktpaar) speichern. Diese Punktpaare sollen dabei
nicht den Wert des Punkts sondern einen Verweis auf ein Element der
Punktliste speichern.
In C würde ich das als Array von Punkten und Array von Punktpaaren
machen, wobei ein Punktpaar aus zwei Zeigern auf Punkte besteht.

In C++ wäre mein Ansatz:
class Punktpaar
{
// [...]
list<Punkt>::iterator p1, p2;
}
list<Punkt> punkt_liste;
list<Punktpaar> punktpaar_liste;

Also wie bei C, nur Listen (STL list) statt Arrays und Iteratoren statt
Zeigern. Ist dieser Ansatz so brauchbar oder gibt es einen anderen,
üblichen Ansatz?

Der Ansatz ist brauchbar, wenn Du auf die Liste, wo p1 und p2
hineinzeigen, nicht Operationen ausführst, welche die Iteratoren
invalidieren. Bei std::list gibt's nicht sehr viele Operationen,
welche Iteratoren invalidieren; im wesentlichen darfst Du die durch p1
und p2 referenzierten Elemente nicht aus der Liste entfernen und
natürlich die Liste selbst nicht zerstören.

Ich würde wohl std::pair verwenden, statt Punktpaar selbst zu
definieren, wenn es nicht Punktpaar-spezifische Operationen gibt.


Quote:
2.: ich möchte ein Element zu einer Liste hinzufügen und dann
einen Iterator haben, der auf dieses Element zeigt.
liste.back () gibt mir den Wert des Elements, also nicht das, was ich
möchte.
liste.end () gibt mir einen Iterator, der *hinter* das letzte Element
zeigt. Mit operator-- könnte ich diesen jetzt auf das letzte Element
zurückverschieben. Allerdings ist das ein gewisser "Umweg".

Gibt es eine andere Möglichkeit, einen Iterator auf entweder das letzte
Element der Liste oder auf das zuletzt hinzugefügte Element zu erhalten?

Wenn Du ein Element mit insert() hinzufügst, erhälst Du als
Rückgabewert einen Iterator auf das eingefügte Element.

Für einen Iterator auf das letzte Element gibt es wohl nichts ausserem
obengenanntem Umweg.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sun Dec 05, 2004 12:58 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Martin Herrmann wrote:

Quote:
Hallo,

ich habe zwei Fragen zur STL-Iteratoren, zu denen ich auch
erstaunlicherweise keine Literatur im WWW finde - vielleicht fehlen mir
einfach die richtigen Suchbegriffe.

1.: Ich möchte eine Liste von Punkten (class Punkt) sowie eine Liste von
Punktpaaren (class Punktpaar) speichern. Diese Punktpaare sollen dabei
nicht den Wert des Punkts sondern einen Verweis auf ein Element der
Punktliste speichern.
In C würde ich das als Array von Punkten und Array von Punktpaaren
machen, wobei ein Punktpaar aus zwei Zeigern auf Punkte besteht.

In C++ wäre mein Ansatz:
class Punktpaar
{
// [...]
list<Punkt>::iterator p1, p2;
}
list<Punkt> punkt_liste;
list<Punktpaar> punktpaar_liste;

Also wie bei C, nur Listen (STL list) statt Arrays und Iteratoren statt
Zeigern. Ist dieser Ansatz so brauchbar oder gibt es einen anderen,
üblichen Ansatz?

Nun, du könntest genausogut den Zeiger nehmen. Du mußt aber aufpassen, denn
wenn du an den Vektor Objekte anhängst, können die ungültig werden, wenn
reallokiert werden muß. Aber bei Iteratoren ist das nicht anders.
Eine Alternative wäre das Speichern von Indices.

Quote:
2.: ich möchte ein Element zu einer Liste hinzufügen und dann
einen Iterator haben, der auf dieses Element zeigt.
liste.back () gibt mir den Wert des Elements, also nicht das, was ich
möchte.
liste.end () gibt mir einen Iterator, der *hinter* das letzte Element
zeigt. Mit operator-- könnte ich diesen jetzt auf das letzte Element
zurückverschieben. Allerdings ist das ein gewisser "Umweg".

Gibt es eine andere Möglichkeit, einen Iterator auf entweder das letzte
Element der Liste oder auf das zuletzt hinzugefügte Element zu erhalten?

Hmm, vielleicht insert statt push_back und dann den Rückgabewert verwenden.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Werner Salomon
Guest





PostPosted: Sun Dec 05, 2004 4:46 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Martin Herrmann <martin.herrmann (AT) stud (DOT) uni-karlsruhe.de> wrote

Quote:
ich habe zwei Fragen zur STL-Iteratoren, zu denen ich auch
erstaunlicherweise keine Literatur im WWW finde - vielleicht fehlen mir
einfach die richtigen Suchbegriffe.

1.: Ich möchte eine Liste von Punkten (class Punkt) sowie eine Liste von
Punktpaaren (class Punktpaar) speichern. Diese Punktpaare sollen dabei
nicht den Wert des Punkts sondern einen Verweis auf ein Element der
Punktliste speichern.
In C würde ich das als Array von Punkten und Array von Punktpaaren
machen, wobei ein Punktpaar aus zwei Zeigern auf Punkte besteht.

In C++ wäre mein Ansatz:
class Punktpaar
{
// [...]
list<Punkt>::iterator p1, p2;
}
list<Punkt> punkt_liste;
list<Punktpaar> punktpaar_liste;

Also wie bei C, nur Listen (STL list) statt Arrays und Iteratoren statt
Zeigern.

Hallo Martin,

ich finde es unüblich, Iteratoren in Containern abzulegen, was Du ja
vor hast, auch wenn es über den Umweg eines Punkte-Paares
funktioniert.
Genauso wie Pointer (in C und C++) sind Iteratoren ein flüchtig Ding.
Wird das Objekt, auf den der Pointer/Iterator zeigt, verschoben oder
gelöscht, so ist der Pointer/Iterator nichts mehr wert.
In C++ hat man zumindest den Vorteil, dass die Gültigkeit eines
Iterators definiert ist. Bei der std::list ist für alle einfügenden
Methoden die Gültgkeit eines Iterators garantiert.

Quote:
Ist dieser Ansatz so brauchbar oder gibt es einen anderen,
üblichen Ansatz?
Eventuell mit boost::shared_ptr< Punkt >, aber es wäre für uns

hilfreicher, wenn Du uns etwas über den Hintergrund Deiner Applikation
erzählst. Wichtig wäre z.B., ob die Punkte, nachdem sie im Container
liegen, nochmal verändert werden. Weiter wäre es hilfreich zu wissen,
für was die Punktepaare da sind (Strecken?) und wie diese benutzt
werden.

Quote:
2.: ich möchte ein Element zu einer Liste hinzufügen und dann
einen Iterator haben, der auf dieses Element zeigt.
liste.back () gibt mir den Wert des Elements, also nicht das, was ich
möchte.
liste.end () gibt mir einen Iterator, der *hinter* das letzte Element
zeigt. Mit operator-- könnte ich diesen jetzt auf das letzte Element
zurückverschieben. Allerdings ist das ein gewisser "Umweg".

Gibt es eine andere Möglichkeit, einen Iterator auf entweder das letzte
Element der Liste oder auf das zuletzt hinzugefügte Element zu erhalten?

Alle sequenziellen Container bieten eine Methode
iterator insert( iterator p, const T& x );
an. Eine Kopie von 'x' wird vor 'p' eingefügt, der Iterator auf die
Kopie von 'x' wird zurückgeliefert. Also konkret in Deinem Fall
Punkt pkt;
std::list< Punkt >::iterator iPkt
= punkt_liste.insert( punkt_liste.end(), pkt );
'iPkt' ist jetzt der Iterator auf den gerade eingefügten Punkt.

Gruß
Werner

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Herrmann
Guest





PostPosted: Sun Dec 05, 2004 5:28 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Werner Salomon (2004-12-05):
Quote:
ich finde es unüblich, Iteratoren in Containern abzulegen, was Du ja
vor hast, auch wenn es über den Umweg eines Punkte-Paares
funktioniert.

Ja, woran ich dachte ist, dass Iteratoren das C++-Äquivalent zu
C-Zeigern sind und man die daher verwenden könnte. Wirklich interessant
wäre das nur, wenn die Iteratoren beim reallozieren gültig bleiben
würden.


Quote:
Genauso wie Pointer (in C und C++) sind Iteratoren ein flüchtig Ding.
Wird das Objekt, auf den der Pointer/Iterator zeigt, verschoben oder
gelöscht, so ist der Pointer/Iterator nichts mehr wert.

Ja, aber Indizies speichern ist ja wohl bei einer Liste auch nicht
gerade brauchbar, weil es keinen operator[] gibt (bzw. dieser recht
langsam wäre), oder?


Quote:
Eventuell mit boost::shared_ptr< Punkt >, aber es wäre für uns
hilfreicher, wenn Du uns etwas über den Hintergrund Deiner Applikation
erzählst. Wichtig wäre z.B., ob die Punkte, nachdem sie im Container

Nun, die Grundidee ist, einen starren Körper (bzw. 3D-Modell) zu bauen,
der aus Punkten und Linien besteht.
Punkte können sich ändern (ihren Wert) und es können welche dazukommen,
Löschen von Punkten lässt sich evtl. ausschließen.


Quote:
iterator insert( iterator p, const T& x );

Ah, OK, das ist es, was ich suchte. Ich wundere mich, dass push_back
keinen Iterator auf das eingefügte Element zurückgibt.


cya,
Martin
--
Mit ungefähr 100 Std/km deutlich abheben. Fahrt aufholen. Steigen bei
ca. 120 Std/km.
- Flughandbuch DR400/180 R

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Herrmann
Guest





PostPosted: Sun Dec 05, 2004 5:29 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Rolf Magnus (2004-12-05):
Quote:
Nun, du könntest genausogut den Zeiger nehmen. Du mußt aber aufpassen, denn
wenn du an den Vektor Objekte anhängst, können die ungültig werden, wenn

Ja, deshalb hatte ich ein Liste genommen Wink.
Gibt es eine Lösung in der STL, wo beim Reallokieren alle Iteratoren
automatisch aktualisiert werden?


Quote:
Eine Alternative wäre das Speichern von Indices.

Hehe, den Einfall hatte ich mittlerweile auch...ursprünglich bin ich da
vor lauter Abstraktion gar nicht drauf gekommen, obwohl es ja eigentlich
recht naheligend ist.
Wenn man allerdings eine Liste hat, ist das mangsels effizientem
operator[] auch nicht brauchbar.


Gruß,
Martin
--
Mit ungefähr 100 Std/km deutlich abheben. Fahrt aufholen. Steigen bei
ca. 120 Std/km.
- Flughandbuch DR400/180 R

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sun Dec 05, 2004 7:25 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Martin Herrmann wrote:

Quote:
Rolf Magnus (2004-12-05):
Nun, du könntest genausogut den Zeiger nehmen. Du mußt aber aufpassen,
denn wenn du an den Vektor Objekte anhängst, können die ungültig werden,
wenn

Ja, deshalb hatte ich ein Liste genommen Wink.

Ah, richtig. Du hast mich mit deiner Terminologie (Array) verwirrt.

Quote:
Gibt es eine Lösung in der STL, wo beim Reallokieren alle Iteratoren
automatisch aktualisiert werden?

Nein.

Quote:
Eine Alternative wäre das Speichern von Indices.

Hehe, den Einfall hatte ich mittlerweile auch...ursprünglich bin ich da
vor lauter Abstraktion gar nicht drauf gekommen, obwohl es ja eigentlich
recht naheligend ist.
Wenn man allerdings eine Liste hat, ist das mangsels effizientem
operator[] auch nicht brauchbar.

Ich dachte, du hast die Liste verwendet, damit die Iteratoren gültig
bleiben. Wenn du diese Iteratoren aber nicht mehr brauchst, kannst du dann
nicht auch einen Vektor nehmen?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sun Dec 05, 2004 7:33 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Martin Herrmann wrote:

Quote:
Werner Salomon (2004-12-05):
ich finde es unüblich, Iteratoren in Containern abzulegen, was Du ja
vor hast, auch wenn es über den Umweg eines Punkte-Paares
funktioniert.

Ja, woran ich dachte ist, dass Iteratoren das C++-Äquivalent zu
C-Zeigern sind und man die daher verwenden könnte. Wirklich interessant
wäre das nur, wenn die Iteratoren beim reallozieren gültig bleiben
würden.

Das wäre allerdings sehr ineffizient, denn dann müßte der Container sich
eine Liste aller auf ihn verweisenden Iteratoren merken und diese bei den
betreffenden Operationen alle updaten. Dazu kommt, daß man dann nicht mehr
den Iterator für vector als einfachen Pointer ausführen könnte, denn bei
dem könnte man nicht das Kopieren und das Löschen überwachen, was der
Container bräuchte, damit seine Iteratorliste immer korrekt ist.

Quote:
Genauso wie Pointer (in C und C++) sind Iteratoren ein flüchtig Ding.
Wird das Objekt, auf den der Pointer/Iterator zeigt, verschoben oder
gelöscht, so ist der Pointer/Iterator nichts mehr wert.

Ja, aber Indizies speichern ist ja wohl bei einer Liste auch nicht
gerade brauchbar, weil es keinen operator[] gibt (bzw. dieser recht
langsam wäre), oder?

Bei einer Liste bleiben Iteratoren allerdings auch nach dem Einfügen von
Elementen gültig.

Quote:
Eventuell mit boost::shared_ptr< Punkt >, aber es wäre für uns
hilfreicher, wenn Du uns etwas über den Hintergrund Deiner Applikation
erzählst. Wichtig wäre z.B., ob die Punkte, nachdem sie im Container

Nun, die Grundidee ist, einen starren Körper (bzw. 3D-Modell) zu bauen,
der aus Punkten und Linien besteht.
Punkte können sich ändern (ihren Wert) und es können welche dazukommen,
Löschen von Punkten lässt sich evtl. ausschließen.

Bist du sicher, daß du eine Liste willst? Sie ist insbesondere beim
Speichern von vielen kleinen Objekten eher ineffizient, sowohl was
Speicherverbrauch angeht, als auch im Bezug auf die Geschwindigkeit. Mir
scheint deque oder vector eher der passende Container zu sein. Deque dürfte
beim Einfügen schneller sein als vector.

Quote:
iterator insert( iterator p, const T& x );

Ah, OK, das ist es, was ich suchte. Ich wundere mich, dass push_back
keinen Iterator auf das eingefügte Element zurückgibt.

Ich mich auch.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andre Poenitz
Guest





PostPosted: Mon Dec 06, 2004 9:12 am    Post subject: Re: Iteratoren auf Listen Reply with quote

Martin Herrmann <martin.herrmann (AT) stud (DOT) uni-karlsruhe.de> wrote:
Quote:
Gibt es eine Lösung in der STL, wo beim Reallokieren alle Iteratoren
automatisch aktualisiert werden?

Nein. Du kannst lediglich z.B. eines std::vector mit reserve() _vor dem
fuellen_ ausreichend gross machen.

Quote:
Eine Alternative wäre das Speichern von Indices.

Hehe, den Einfall hatte ich mittlerweile auch...ursprünglich bin ich da
vor lauter Abstraktion gar nicht drauf gekommen, obwohl es ja eigentlich
recht naheligend ist.
Wenn man allerdings eine Liste hat, ist das mangsels effizientem
operator[] auch nicht brauchbar.

Dann nimm doch std::vector. Quadratisch, praktisch, gut. Und mit indizes
hast Du robuste "Iteratoren".

Andre'

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Dec 06, 2004 1:21 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Thomas Maeder wrote:

Quote:
Ich würde wohl std::pair verwenden, statt Punktpaar selbst zu
definieren, wenn es nicht Punktpaar-spezifische Operationen gibt.

Ich würde ehe std::pair vermeiden, wenn die Namen der Felder nicht
gerade first und second sein sollen. Bei Punktpaar ist est beinahe
möglich, aber in allgemein...

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Dec 06, 2004 1:30 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Jw. Apri wrote:
Quote:
Martin Herrmann wrote:

1.: Ich möchte eine Liste von Punkten (class Punkt) sowie eine
Liste
von Punktpaaren (class Punktpaar) speichern. Diese Punktpaare
sollen
dabei nicht den Wert des Punkts sondern einen Verweis auf ein
Element der Punktliste speichern.

[snip]

class Punktpaar
{
// [...]
list<Punkt>::iterator p1, p2;
}
list<Punkt> punkt_liste;
list<Punktpaar> punktpaar_liste;

warum auch nicht - und noch besser als Punktpaar wäre
std::pair<list

Wenn man meint, dass first und second sinnvolle Namen der Felder sind.
Bei Punkten könnte das sogar vorkommen, aber in den allgemeinenen
Fällen
wird est nicht der Fall sein.

Quote:
std::list<std::pair punktpaar_liste;

2.: ich möchte ein Element zu einer Liste hinzufügen und dann
einen Iterator haben, der auf dieses Element zeigt.

die push()s liefern keine iterator, dafür aber insert(). für
push_back() also insert(punkt_liste.end(), ...) und für push_front()
insert(punkt_liste.begin(), ...) nehmen.

liste.end () gibt mir einen Iterator, der *hinter* das letzte
Element
zeigt. Mit operator-- könnte ich diesen jetzt auf das letzte
Element
zurückverschieben. Allerdings ist das ein gewisser "Umweg".

oder einfach (punkt_liste.end() - 1) - mit iteratoren kann man auch
rechnen.

Mit random_access_iterator wohl, aber Iteratoren von std::list sind
nicht random_access_iterator, sondern lediglich bidirectional_iterator.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Martin Herrmann
Guest





PostPosted: Tue Dec 14, 2004 5:47 pm    Post subject: Re: Iteratoren auf Listen Reply with quote

Rolf Magnus (2004-12-05):
Quote:
Martin Herrmann wrote:
C-Zeigern sind und man die daher verwenden könnte. Wirklich interessant
wäre das nur, wenn die Iteratoren beim reallozieren gültig bleiben
würden.
Das wäre allerdings sehr ineffizient, denn dann müßte der Container sich

Ja, natürlich.
Aber wenn ich aus irgend einem Grund keine Liste verwenden kann und
diese Funktionalität braucht, dann muss ich das irgendwie selbst
implementieren und dann ist es wahrscheinlich *noch* langsamer.


Quote:
Bist du sicher, daß du eine Liste willst? Sie ist insbesondere beim

Nein, bzw. ja, mittlerweile habe ich beschlossen, dass ich *keine* Liste
will Wink.


cya,
Martin
--
Mit ungefähr 100 Std/km deutlich abheben. Fahrt aufholen. Steigen bei
ca. 120 Std/km.
- Flughandbuch DR400/180 R

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.