我正在将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是什么类型?
答案 0 :(得分:1)
编写方式仅支持ForwardRange。
您当然可以尝试制作BidirectionalRange版本,尽管我怀疑这不是很难的,还是不太通用。
考虑如何为pattern
指定所有选项,使其也可以向后匹配。