Filter in c++ mit Lambda nutzen

Filter werden benutzt, um Operationen auf einer großen Datenmenge auszuführen. In diesem Beispiel ist die Datenmenge allerdings überschaubar. Zunächst wird jedes Element modifiziert (map), dann ein Filter angewendet, um die Menge zu verkleinern. Abschließend folgt eine Reduzierung, bis nur noch ein Element übrig bleibt. Ein Anwendungsfall wären Streams.

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

auto map = [](int &elem) -> int {return elem-1;};
auto filter = [](int &elem) -> bool {return elem % 2 == 0 || elem <= 0;};
auto reduce = [](int &x, int &y) -> int {return x*y;};

int main(){
    std::vector<int> origin{-3,-2,-1,0,1,2,3,4,5,6,7,8,9};
    std::vector<int> afterMap;

    // map: do something with all elements in this datastructure
    std::transform(origin.begin(), origin.end(), std::back_inserter(afterMap), map);

    // filter: conditions to skip elements
    std::vector<int>::iterator vectorfilter = std::remove_if(afterMap.begin(), afterMap.end(), filter);

    for(auto it = afterMap.begin(); it != vectorfilter; it++){
        std::cout << *it << '\n';
    };

    // reduce: to reduce elements in this container via sum, multiply or other things
    int result = std::accumulate(afterMap.begin(), vectorfilter, afterMap[0], reduce);
    std::cout << result << '\n';
}

cpp_filter.png

0.12724907 BEE
2 comments

!LOL
!PIZZA
!BBH

0E-8 BEE

@ozelot47! Your Content Is Awesome so I just sent 1 $BBH (Bitcoin Backed Hive) to your account on behalf of @dotwin1981. (1/1)

0E-8 BEE

I'm glad I know sign language
It's pretty handy.

Credit: reddit
@ozelot47, I sent you an $LOLZ on behalf of dotwin1981

(4/10)
ENTER @WIN.HIVE'S DAILY DRAW AND WIN HIVE!

0E-8 BEE

PIZZA!

$PIZZA slices delivered:
@dotwin1981(3/10) tipped @ozelot47

0E-8 BEE