[STL] "alle" finden
-
Hi, ich nutze einen Vektor und möchte diesen durchsuchen.
Leider bekomme ich mit *find* nur den ersten gefundenen Eintrag.vector<int> vZahlen; vZahlen.push_back(1); vZahlen.push_back(2); vZahlen.push_back(1); vZahlen.push_back(3); vector<int>::const_iterator iter = 0; iter = find(vZahlen.begin(), vZahlen.end());
Komme ich mit der find-Methode auch an die anderen Einträge ran, oder brauche ich dazu die search-Methode? [Nur leider versteh ich die nicht.]
Alternativ könnte ich ja selbt den Vektor von Anfang bis Ende durchgehen und mir passende Iteratoren wegspeichern.
// vZahlen des vorherigen Beispiels... typedef vector<int> zahlengrab; typedef zahlengrab::const_iterator iter; vector<iter> vIter; for(iter = vZahlen.begin(); iter != vZahlen.end(); ++iter) { if(*iter == 1) vIter.push_back(iter); }
Aber bestimmt gibt's das schon als STL-Methode...
-
Hallo,
schau dir mal std::for_each an.
mfg
v R
-
virtuell Realisticer schrieb:
Hallo,
schau dir mal std::for_each an.
mfg
v Roder schau dir lieber gleich an gutes buch/tuto an wo Iter. besprochen werden
-
std::for_each kenne ich schon.
Das hat auch keine anderen Auswirkungen als wenn ich meinen Vektor in einer normalen for-Schleife durchgehe.Ich bräuchte eine Mehtode, welche mit alle Vorkommnissiteratoren (von z.B. 1 in meinem Vektor) in einem andern Vektor speichert.
Ich glaube std::search könnte das machen, aber ich weiß nicht wie ich das anwenden muss.Mit meiner for-Schleife habe ich das ja auch hinbekommen.
-
ich hab mich auch schon öfter gefragt, warum es kein for_each_if gibt - wenn man das versucht nachzubauen kommt selten etwas heraus was einfacher als eine simple for schleife ist.
std::for_each(vZahlen.begin(),vZahlen.end(),if_then(_1==1,vIter.push_back(_1)));
-
Ist zwar kein Standard aber ich würde einfach mal nach copy_if googeln.
-
std::for_each(vZahlen.begin(),vZahlen.end(),if_then(_1==1,vIter.push_back(_1)));
Hu, das ist ja ein kleines Monster.
@copy_if
Ich werde mal kucken.. Danke für den Hinweis.