for_each frage



  • hola leute

    ich hab folgenden code:

    //class X;
    
    X meine_klasse(parameter);
    for_each(mein_vector.begin(), mein_vector.end(), meine_klasse);
    // etwas mit meine_klasse machen
    

    funktioniert natuerlich nicht. meine_klasse ist dann noch immer leer.
    aber wie kann ich das dann machen?
    nach for_each wuerde meine klasse unter umstaenden jedoch ein paar hundert strings beinhalten. wenn ich es jedoch so

    meine_klasse = for_each(mein_vector.begin(), mein_vector.end(), meine_klasse);
    

    machen wuerde, waere das jedoch ein riessiger aufwand den ich vermeiden will.

    wie stell ich das dann also an ?
    oder muss ich mir da das for_each selber nachbauen und so modifizieren damit das klappt ??

    Meep Meep



  • Was willst Du denn damit machen?

    Ich bin mir ziemlich sicher, dass Du nicht verstanden hast, was for_each normalerweise macht.

    for_each ist nämlich dazu da, ein Funktionsobjekt (Parameter #3) auf eine Sequenz von Objekten anzuwenden (Parameter #1-#2). Siehe dazu auch http://www.sgi.com/tech/stl/for_each.html



  • hoi nman

    ansich glaub ich schon das ich verstanden habe was for_each macht.
    mir geht es darum das in dem vector ein haufen strings drinnen stehen.
    meine_klasse beherbergt auch einen vector<string>.
    meine_klasse ueberpruft dann die einzelnen strings. und wenn der jeweilige string in ein bestimmte schema passt, dann wird er in den vector von meine_klasse reinkopiert. am schluss hab ich dann die gesuchten strings in meine_klasse.

    Meep Meep



  • Schau Dir dazu besser mal remove_copy_if an, der kopiert Elemente von einem Vektor in einen anderen und lässt dabei Elemente aus (sprich entfernt sie aus dem Zielvektor) die einem Prädikat gehorchen.



  • re

    die elemente sollen ja nur kopiert und nicht geloescht auch noch.

    Meep Meep



  • Hallo,
    remove_copy_if kopiert alle Elemente zwischen (start, end] für die das Prädikat _nicht_ true ist. Es wird also nicht wirklich etwas gelöscht.

    Gruß, Caipi



  • ich will und kann kein remove_copy_if verwenden.

    ich will einfach nur wissen ob es eine moeglichkeit gibt das ich for_each ein object uebergeben kann, das ich dann auch noch weiterverwenden kann oder ob das nicht geht.
    davon abgesehen is der vector in meine_klasse kein std::vector

    Meep Meep



  • Man könnte jetzt argumentieren dass das kein Hindernis ist, da Du ja einen Adapter-Iterator basteln könntest aber ums mal kurz und knackig zu formulieren for_each nimmt eine Kopie des Funktors, also ohne den "riesen Aufwand" (rumkopiererei) kannst Du es so nicht machen.



  • danke


Anmelden zum Antworten