使用临时容器编写范围管道
在 range-v3 中,当使用使用返回向量,有必要创建一个管道,将该函数映射到该范围的所有元素,并将所有结果向量展平到一个范围及其所有元素
最初,人们可能会尝试编写一个管道,例如:
<code class="cpp">auto rng = src | view::transform(f) | view::join;</code>
但是,这种方法以前是不可行的,因为不可能创建像这样的临时容器的视图由 f.
制作,为了解决这个问题,引入了一个补丁,现在允许正确写入此类范围管道。关键是将views::cache1运算符添加到管道中,如下例所示:
<code class="cpp">auto rng = views::iota(0, 4) | views::transform([](int i) { return std::string(i, char('a' + i)); }) | views::cache1 | views::join('-');</code>
这确保管道正确处理临时容器,允许我们编写使用范围管道有效地临时容器。
对于问题中描述的问题,解决方案是修改管道如下:
<code class="cpp">auto rng = src | views::transform(f) | views::cache1 | views::join;</code>
以上是如何将范围管道与临时容器一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!