probleme mit rbegin() und deque
-
Kann mir bitte jemand bei dem Problem helfen auf dem Bild? wert.begin() funktioniert, nur rbegin() nicht. https://sites.google.com/site/csbackround/home/Bildschirmfoto-1.png?attredirects=0
-
Ein iterator und ein reverse_iterator sind eben verschiedene Typen und es gibt nicht die Möglichkeit diese auf direkte Weise einander zuzuweisen oder sonstwie zu verkuppeln. Und das ist auch gut so, denn man sollte sich des Unterschieds bewusst sein, bevor man so etwas tut.
Was willst du überhaupt erreichen?
-
ReverseIter.base();Aber das suchst du sicher nicht. Wie SeppJ gesagt hat, ist ein
reverse_iteratorein total anderer Typ...
-
Ich möchte, dass wenn der Iterator über das Ende getreten ist, das ein neues Ellement angehängt wird, und der Iterator darauf gesetzt wird.
-
Und wieso willst du dazu
rbegin()verwenden?
-
Ich wusste das mit dem speziellen Iterator nicht, in meinem Buch stand: Liefert Iterator auf letztes Element der Deque, also wollte ich das verwenden.
-
BigGreenFoot schrieb:
Ich wusste das mit dem speziellen Iterator nicht, in meinem Buch stand: Liefert Iterator auf letztes Element der Deque, also wollte ich das verwenden.
Buchname? Denn
rbegin()liefert das letzte Element aber alsreverse_iterator, welcher all deine "Bewegungen" spiegelt.
-
Das Gegenteil von rbegin müsste übrigens end sein, welches ein "normaler" iterator ist.
-
end zeigt aber nicht auf das letzte Containerelement.
-
Belli schrieb:
end zeigt aber nicht auf das letzte Containerelement.
Genau. Der Rückgabewert von
end()zeigt hinter das letzte Element.
-
d.end() - 1;
-
ok
-
Ow die Deque legt automatisch neue Elemente an, sobald man dem Ende nahe kommt.
-
BigGreenFoot schrieb:
Ow die Deque legt automatisch neue Elemente an, sobald man dem Ende nahe kommt.
Darauf solltest du dich besser nicht verlassen. Selbst wenn sie noch zusätzlichen Speicher auf Vorrat hält, wird sie nichts davon mitbekommen, wenn du über das Ende hinausschreibst.
Eine Möglichkeit, eine Referenz auf das neu eingefügte End-Element zu bekommen, wärepos=d.insert(d.end(),wert);
-
Gut trifft das auch zu wenn man den zeiger nur durch inclementieren, und declementieren verändert?
-
Natürlich. Du kannst nicht davon ausgehen, dass sich an der Grösse des Containers was änderst, wenn du irgendwas mit den Zeigern/Iteratoren auf dessen Elemente anstellst. Inkrementieren des
end()-Iterators ist immer undefiniertes Verhalten.Aber benutze doch einfach die dafür vorgesehenen Memberfunktionen, wenn du Elemente einfügen willst.
-
Die declaration von insert ist void insert(iterator, obj%)
?!?
Cstoll: Wiso dan pos=d.insert(d.end(), wert);
-
BigGreenFoot schrieb:
Die declaration von insert ist void insert(iterator, obj%)
Nein, selbst wenn man % durch & ersetzt nicht.
Schau mal hier: http://www.cplusplus.com/reference/stl/deque/insert
-
Interessant!!! Das was ihr schreibt stimmt, aber dennoch is irgendwo der Wurm drin.
In meinem Buch Einstieg in C++ 4. Auflage von Arnold Willemer, Seite 398, Tabellenspalte 20 heißt es „void inesrt(iterator, obj&)“.
-
Da wäre aber noch was wie kann ich etwas vorne anhängen, und einen Zeiger darauf setzen?