Anzeige:
Ergebnis 1 bis 3 von 3

Thema: STL, kleines vector und iterator-problem

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.12.2004
    Beiträge
    11

    STL, kleines vector und iterator-problem

    Ich habe zwei vectoren, einer enthält doubles, der andere ints. Beide sind gleich lang. Ich möchte einen bestimmten Wert aus beiden löschen, und zwar folgendermaßen: ich suche den int-vector nach einem bestimmten eintrag ab (z.B. 7), dann nehme ich den index an dem die 7 liegt und lösche diesen index aus dem double- und dem int-vector. Wenn im int-vector die Zahl nicht vorhanden ist lösche ich nichts. Zur verdeutlichung nochmal mit kleinem Beispiel:

    int_vec (1, 4, 6, 7, 9)
    double_vec (1.0, 33.3, 28.5, 77.3, 100)

    wenn ich also den index suche in dem der int-vector die 7 hat bekomme ich als ergebnis eine 4 und lösche folglich aus dem double-vector die 77.3

    Das ganze lässt sich zwar über eine schleife die man beim ensprechenden index abbricht und die Einträge löscht. Ich möchte es aber gerne mit dem find-algorithmus aus der STL machen. Und hier fangen die Probleme an: find() gibt mir einen Iterator der Art
    Code:
    vector<int>::iterator
    zurück und nicht den gesuchten index! Ich kann zwar mit
    Code:
    pos = find(int_vector.begin(), int_vector.end(), gesuchte_zahl)
    int_vector.erase(pos)
    die zahl aus dem einen vector löschen, beim double vector bekomm ich aber ein problem da der iterator ja ein pointer und keine zahl ist. Ausserdem verlangt der double-vector einen iterator der Art
    Code:
    vector<double>::iterator
    Das heisst
    Code:
    double_vector.erase(pos)
    geht so schief das er nicht mal kompilieren will. Kann mir jemand verraten wie ich aus dem Iterator den mir find() zurück gibt den index heraus bekomme? Danke schonmal...

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Bei Random-Iteratoren kannst du einfach Pointer-Arithmetik verwenden, um von einem Iterator auf den Index, bzw. von einem Index auf einen Iterator zu kommen.
    Code:
    int diff;
    diff = pos - int_vec.begin();
    double_vec.erase(double_vec.begin() + diff);
    Wenn aber die beiden Vectoren so eng zusammen hängen, wäre es da nicht eine Möglichkeit das auch gleich im Quelltext auszudürcken?Also indem du einen Vector hast, der Paare von int,double hat, oder vielleicht eine std::map mit Key int und Value double.

  3. #3
    Registrierter Benutzer
    Registriert seit
    31.12.2004
    Beiträge
    11
    Das mit der Pointer Arithmetik hab ich heut nacht noch selber gefunden, danke . Das mit dem paarweisen abspeichern ist mir auch gekommen, hab mich aber noch nicht wirklich damit befasst wie das zu bewerkstelligen wäre. Wird evtl. später noch implementiert, ich melde mich dann nochmal wenn ich Probleme hab ;-)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •