# std::experimental::popcount

From cppreference.com
< cpp‎ | experimental‎ | simd

Defined in header `<experimental/simd>` |  |
template< class T, class Abi > int popcount( const simd_mask<T, Abi>& k ) noexcept; |  | (parallelism TS v2)

Returns the number of true values in the mask k.

### Parameters

k | - | the `simd_mask` to apply the reduction to

### Return value

An int in the range `[`​0​`,` simd_size_v<T, Abi>`)`.

### Example

Run this code

    #include <cstddef>
    #include <experimental/simd>
    #include <iostream>
    namespace stdx = std::experimental;

    template<typename Abi>
    int count_zeros(stdx::simd<int, Abi> v)
    {
        return stdx::popcount(v == 0); // v == 0 returns a simd_mask
    }

    void println(auto rem, auto const v)
    {
        std::cout << rem << ": ";
        for (std::size_t i = 0; i != v.size(); ++i)
            std::cout << v[i] << ' ';
    }

    int main()
    {
        stdx::simd<int> x{8};
        println("x", x);
        std::cout << "  zeros: " << count_zeros(x) << '\n';

        x[3] = x[1] = false;
        println("x", x);
        std::cout << "  zeros: " << count_zeros(x) << '\n';
    }

Possible output:

    x: 8 8 8 8   zeros: 0
    x: 8 0 8 0   zeros: 2

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/experimental/simd/popcount&oldid=159773"