我将 cmcSTL2 库与 C++ 建议的范围与 gcc 8 一起使用
std::string text = "Let me split this into words";
std::string pattern = " ";
auto splitText = text | ranges::view::split(pattern) |
ranges::view::reverse;
但这不起作用,因为 View 只是一个前向范围,而不是范围所需的双向范围(我认为这是正在发生的事情)。为什么?如果
text | ranges::view::split(pattern)
输出子范围的 View 。不能扭转这种观点吗?
同样在 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的类型是什么?
最佳答案
它的编写方式只支持 ForwardRange。
您当然可以尝试制作一个 BidirectionalRange 版本,尽管我怀疑这要么很难要么不太通用。
考虑如何为 pattern
指定所有选项,以便它也可以向后匹配。
关于c++ - 为什么 ranges::split_view 不是双向范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251904/