• cgtjsiwy
    link
    fedilink
    English
    arrow-up
    3
    ·
    1 year ago

    In C++23, you can zip the two arrays, so there’s no need to declare an otherwise useless index variable:

    int stdSumOfValidDataPoints(const MyData& data)
    {
        using namespace std;
        auto&& r = ranges::views::zip_transform(
            [](int data, bool valid){return data * valid;},
            data.dataPoint,
            data.dataPointIsValid
        );
        return accumulate(begin(r), end(r), 0);
    }
    

    Unfortunately, the current implementation of zip_transform in GCC doesn’t understand that the output length is constant 8, so it does needless cmps every iteration to check if it should stop iterating. (Godbolt)