c++ 带视图的向量的转置向量::zip

z6psavjg  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(168)

重复:https://stackoverflow.com/a/61819663/11998382
如果我们在编译时知道外部向量的大小,这应该是可能的。
你只需要编写下面python代码的c++ variadic-template等价物:

def transpose(rng_of_rng):
    return zip(*rng_of_rng)
bnl4lu3b

bnl4lu3b1#

template <std::size_t N, typename T>
auto transpose(std::span<T, N> rng_rng)
{
    return [&] <std::size_t... I>(std::index_sequence<I...>)
    {
        return  ranges::views::zip( rng_rng[I]... );
    }(std::make_integer_sequence<std::size_t, N>{});
}

这就是它的行动:https://godbolt.org/z/oPdn89qnT
我发现barry's answer在尝试将向量转换为静态范围跨度时非常有用。
仔细想想,也许这个想法并不太好,因为它会超出元组的范围,我只使用N=10,但我怀疑元组大小是否真的很大。

相关问题