我想使用现有视图进行连接。在代码中:
auto rng = view::empty<vector<int>>();
for(int i{0}; i < 5; ++i)
{
vector<int> const & v{foo()}; // returns a reference
rng |= view::concat(v); // doesn't compile - error: no viable overloaded '|='
};
换句话说 - 如何创建一个视图到多个向量,这些向量的数量在运行时才知道?
答案 0 :(得分:2)
您不能以这种方式撰写视图。连接视图会生成具有不同类型的对象。您无法将其分配回原始视图,因为其类型不同。
你可以使用view::cycle
(取一个范围并无限重复)和view::take
(取第一个 N 元素)来获得你所效果的效果范围)。
vector<int> const & v{foo()}; // returns a reference
auto rng = v | view::cycle | view::take(5 * v.size());
修改的
如果foo()
每次都可以返回对不同向量的引用,那么除了view::generate
之外,您还可以使用view::join
和view::take
:
auto rng = view::generate(foo) | view::take(5) | view::join;