首页 > 解决方案 > 加入可变数量的范围

问题描述

我需要连接多个boost::iterator_range. 我最初的想法是使用boost::join,但看起来它只需要两个范围作为参数。在另一个问题上,我发现投票最多的答案是“好吧,再次调用 join”,但这对我来说不起作用。我意识到原因可能是我在编译时不知道要加入的范围的确切数量,导致boost::join不知道它的返回类型。为了更清楚,我需要在范围 for 循环中使用它,例如:

SomeRangeType result;

for ( const auto& a_range : some_list_of_ranges )
{
    result = boost::join( result, a_range );
}

return result;

是否存在另一种像我需要的类似加入的操作boost

标签: c++boostrange

解决方案


range-v3concatjoin视图,看来你想在这里加入视图:

std::vector<std::vector<int>> v{{1, 2, 3}, {4}, {5, 6}};

for (auto e : v | ranges::view::join) {
    std::cout << e << " "; // 1 2 3 4 5 6
}

演示


推荐阅读