[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 R

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


  • Mod

    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.


Log in to reply