为什么range :: split_view不是双向范围?

时间:2019-03-20 00:30:38

标签: c++ range-v3

我正在将cmcstl2库与C ++建议的带有gcc 8的Ranges一起使用

std::string text = "Let me split this into words";
std::string pattern = " ";
auto splitText = text | ranges::view::split(pattern) | 
        ranges::view::reverse;

但是这是行不通的,因为视图只是一个正向范围,而不是范围所要求的双向范围(这是我认为正在发生的事情)。为什么?如果

text | ranges::view::split(pattern)

输出子范围的视图。这种观点不能逆转吗?

同样在cmcstl2中,我必须执行以下操作才能将其打印出来。

for (auto x : splitText)
{
    for (auto m : x)
        std::cout << m;
    std::cout << " ";
}

但是在range-v3 / 0.4.0版本中,我可以这样做:

    for (auto x : splitText)
       std::cout << x << '\n';

为什么? x是什么类型?

1 个答案:

答案 0 :(得分:1)

编写方式仅支持ForwardRange。

您当然可以尝试制作BidirectionalRange版本,尽管我怀疑这不是很难的,还是不太通用。

考虑如何为pattern指定所有选项,使其也可以向后匹配。