Iterator auf Struktur
-
Hallo,
ich möchte ein Element (das letzte) einer Struktur löschen. In meiner Funktion (Datei *.cpp) habe ich den Iterator mit "Points::iterator pi;" aufgerufen. Nun bekomme ich die Meldung dieser Iterator sei in der Struktur nicht definiert. Kann mir jemand sagen was ich falsch mache? Ich programmiere mit Visual C++, nutze aber ein Array einer Struktur von Ansi C.
Hier meine Struktur:
typedef struct
{
double x, y, z;
} Points;
Diese ist in der zugehörigen Headerdatei deklariert.
-
Ja wo ist der Iterator nun? Er ist ja wirklich nicht definiert?!
Iteratoren müssen gemacht werden, die werden nicht automatisch erstellt.
MfG SideWinder
-
sorry, ich dachte es geht genauso wie in der c++ stl.
wo kann ich denn nachlesen, wie ich einen iterator "machen" muß? oder gibt es eine andere (einfachere) möglichkeit, das element aus der struktur zu löschen?gruß.
janin
-
Hallo,
ein Iterator ist im Grunde nix Anderes als ein Zeiger. Vielleicht wäre etwas Code nicht schlecht?
-
Wär schön wenns so wäre *g* - ich denke fast du bist hier im ANSI-C-Forum falsch und gehörst nach C++, aber überlassen wir das dem Moderator.
Weitere Fragen:
Struktur != Container
Aus einer Struktur kann man nichts löschen, die ist fix definiert, du kannst höchstens ein Element aus einer Liste von Strukturen bzw. von mir aus auch aus einem Vektor von Strukturen löschen.
Zum Thema Iterator: Der Iterator hat meistens das gleiche Aussehen hin nach außen, es gibt dabei verschiedene Typen die gehen von forward-iterator (nur ++, und vorwärts) über bidirectional-iterator (vorwärts und rückwärts - zB bei liste) bis hin zum random acces iterator (freier zugriff).
Wenn du herausgefunden hast welcher Iterator für deine Datenstruktur gut ist, dann siehst du dir eine Referenzdeklaration an und musst ihn im Prinzip nur noch implementieren.
Eine andere Frage, wenn du ein Menge von Point-Strukturen hast und mit der C++-STL vertraut bist, warum verwendest du dann nicht gleich einen C++-Container ala std::list?
Oder verstehe ich dein Problem falsch?
MfG SideWinder