Почему range :: split_view не является двунаправленным диапазоном? - PullRequest
2 голосов
/ 20 марта 2019

Я использую библиотеку 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;

Но это не работает, поскольку представление является только прямым диапазоном, а не двунаправленным диапазоном, который требуется для диапазона (который являетсячто я думаю происходит).Зачем?если

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';

Зачем?Какой тип х?

1 Ответ

1 голос
/ 21 марта 2019

Способ написания поддерживает только ForwardRange.

Вы, конечно, можете попробовать сделать версию BidirectionalRange, хотя я подозреваю, что она либо жесткая, либо менее общая.

Подумайте, как задать все параметры для pattern, чтобы он также мог совпадать в обратном направлении.

...