如何使用 range-v3 压缩向量的向量

jlc*_*lin 6 c++ vector range-v3

(这是带有 range-v3 的 Sum 向量的后续)

如果我有两个(或更多)向量,我可以将zip它们组合在一起,range-v3如下所示:

std::vector< int > v1{1,1,1};
std::vector< int > v2{2,2,2};

auto v = ranges::views::zip( v1, v2 )
  | ranges::views::transform( ... );
Run Code Online (Sandbox Code Playgroud)

这很有效,但实际上,我没有显式向量,但我确实有向量的向量。我想做以下事情,但它没有给出相同的结果。(其实我不确定结果是什么,也不知道如何确定结果是什么!)


std::vector< std::vector< int > > V{{1,1,1},{2,2,2}};

auto vV = ranges::views::zip( V )
  | ranges::views::transform( ... );
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能vector< vector >像压缩一些显式向量一样压缩 a ?我尝试过joinstridechunk等一起使用,但还没有找到神奇的组合。

bar*_*top 1

我想如果您不知道编译时外部的大小,vector剩下的唯一合理的解决方案就是解决它。zip我建议不要尝试这样做,因为accumulate它在这种情况下似乎更通用。

std::vector< std::vector< int > > V{{1,1,1},{2,2,2}};

auto vV = ranges::accumulate(
    V,
    std::vector<ResultType>(V[0].size()),
    [](const auto& acc, const auto& next) {
        auto range = ranges::views::zip(acc, next) | ranges::views::transform(...);
        return std::vector<int>(range.begin(), range.end());
    }
)
Run Code Online (Sandbox Code Playgroud)

编辑:我忘记了必须复制范围。