c++ - 为什么 ranges::split_view 不是双向范围?

标签 c++ range-v3

我将 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/

相关文章:

c++ - 使用 glDrawPixels() 在 OpenGL 上绘制像素

c++ - Uniform Initialization with curly brace 被误认为是 Initializer List

c++ - Windows Media Foundation 中的视频捕获可以用于屏幕捕获吗?

c++ - view::c_str 与 view::split 有问题吗?

c++ - 如何使用 range-v3 成对地转换范围?

c++ - v3 make_iterator_range 要求

c++ - 如何为vector <string>分配类值?

c++ - Wx Dev C++ 与 Graphics.h?

c++ - 为什么 range::basic_istream_view::begin() 没有缓存?

c++ - 如何编写使用临时容器的范围管道?