PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : STL, kleines vector und iterator-problem



The_Student
02-01-2005, 03:13
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

vector<int>::iterator
zurück und nicht den gesuchten index! Ich kann zwar mit

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

vector<double>::iterator Das heisst

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...

wraith
02-01-2005, 09:00
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.


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.

The_Student
02-01-2005, 13:55
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 ;-)