 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Martin Herrmann Guest
|
Posted: Fri Dec 03, 2004 9:20 pm Post subject: Iteratoren auf Listen |
|
|
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
|
Posted: Sun Dec 05, 2004 10:08 am Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Sun Dec 05, 2004 10:34 am Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Sun Dec 05, 2004 12:58 pm Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Sun Dec 05, 2004 4:46 pm Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Sun Dec 05, 2004 5:28 pm Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Sun Dec 05, 2004 5:29 pm Post subject: Re: Iteratoren auf Listen |
|
|
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 .
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
|
Posted: Sun Dec 05, 2004 7:25 pm Post subject: Re: Iteratoren auf Listen |
|
|
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 .
|
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
|
Posted: Sun Dec 05, 2004 7:33 pm Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Mon Dec 06, 2004 9:12 am Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Mon Dec 06, 2004 1:21 pm Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Mon Dec 06, 2004 1:30 pm Post subject: Re: Iteratoren auf Listen |
|
|
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
|
Posted: Tue Dec 14, 2004 5:47 pm Post subject: Re: Iteratoren auf Listen |
|
|
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 .
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 |
|
 |
|
|
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
|
|