Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Iteratoren in Arrays verpacken

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.05.2004, 19:53 Uhr
~allPower
Gast


Hi ich habe folgendes Problem:
ich würede gerne zwei Iteratoren (auf Anfang und Ende eines Strings) in ein Pair verpacken und dieses dann in einen Vector oder Array. Soweit klappt das alles auch noch wunderbar, aber wenn ich nun ein weiteres Pair in meinen Vector oder Array einfügen möchte, verschieben sich die Iteratoren vom ersten. Kann jemand helfen ?

C++:
pair<string::iterator, string::iterator> * ts;
ts= new pair<string::iterator, string::iterator>[t];


reingepackt werden die iterator vom String so:

C++:
for(int i=0; i<t; ++i){
    string sequenz="";
    makeString(sequenz, alphabet ,alphabetsize);
    pair<string::iterator,string::iterator> stringpointer sequenz.begin(), sequenz.end());
    ts[i]=stringpointer;



Bei der Ausgabe kommt dann nichts mehr von den usprünglichen Iteratoren heraus:

C++:
for(int i=0; i<t; ++i){
    cout<<i<<" ";
    cout<<*(ts[i].first)<<" - "<<*(ts[i].second-1)<<" ";
    for (string::iterator iter=ts[i].first; iter<ts[i].second; ++iter){
        cout<< *iter;
    }
    cout<<endl;
}




Bearbeitung von Pablo:

Bitte, benutze CPP Tags selber


Dieser Post wurde am 07.05.2004 um 20:47 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.05.2004, 16:30 Uhr
(un)wissender
Niveauwart


Ganz davon mal ab, dass die Iteratoren nicht mehr gültig sind, da du Sequenz mit makeString vermutlich immer wieder änderst, ist es generell ein Problem Iteratoren zu speichern, eben weil sie bei Änderung des Container nicht vorhersagbar (zumindest für den Anwendungsprogrammierer) ungültig werden.
Speicher lieber Index und überprüfe, ob sie noch gültig sind.


Bearbeitung:

Übrigens, von deinen Iteratoren kommt sehr wohl genau das raus, was du gespeichert hast, aber denke dran das du deren Inhalt willst!
Und der hat sich natürlich geändert, schließlich zeigen die Iteratoren ja auf einen char in sequenz und der wird verändert.
Also, vielleicht willst du gar nicht die Iteratoren(Pointer!) speichern, sondern deren Inhalt?


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 08.05.2004 um 16:35 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.05.2004, 18:35 Uhr
~allPower
Gast


Ich muß den String in Form von 2 Iteratoren (einer auf den Anfang und einer auf das Ende) speicher.
Ich dachte ich erzeuge mir jedesmal einen neuen String, der unabhängig vom nächsten Schleifendurchlauf, in dem ich mir ja einen neuen String erzeuge (und durch MakeString verändere), im Speicher vorhanden bleibt und die Iteratoren lustig weiter drauf zeigen können...
Kannst du mir ein Code-Bsp schicken, bei dem das so wäre.
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.05.2004, 21:29 Uhr
(un)wissender
Niveauwart


Nee, kann ich atoc nicht (keine Lust), ist auch nicht meine Aufgabe.
Aber ein Hinweis: Solange du die Iteratoren auf einen Container speicherst und verwenden willst, darf das Objekt nicht zerstört werden!
Genau das passiert aber mit sequenz, wenn die Schleife oder die Methode verlassen wird.
Wenn du das beachtest, dann bleiben die Iteratoren gültig.
Wenn du dann auch noch das Objekt unverändert läßt (eventuell const), dann bleibt auch der Inhalt der Iteratoren erhalten.
Beachtest du dies und modifizierst deinen Code danach, wird er das tun was du willst.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: