LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Спасибо, с одной стороны стало короче, так как нет лямбды с реализацией trim, с другой стороны ranges::reverse_view не удовлетворяет условию contiguous_range, и теперь не получается создать из него string_view, только string, или я что-то упускаю

auto trim = views::transform(views::drop_while(::isspace) | views::reverse |
                             views::drop_while(::isspace) | views::reverse);
const string_view text = "Hello  \nC++  \n\n \n1\n 2\n 3 \n\n4 \n20!\n\n\n"sv;
ranges::filter_view words =
    text
    | views::split("\n"sv)
    | trim
    | views::filter([](auto s) { return !s.empty(); });
for (ranges::reverse_view w : words) {
    string s{w.begin(), w.end()};
    cout << quoted(s) << ", s.size() = " << s.size() << '\n';
}

Новый вариант: https://gcc.godbolt.org/z/vrEx146E1

Старый вариант: https://gcc.godbolt.org/z/1W8fhzPeG

Исходная версия fsb4000, :

Спасибо, с одной стороны стало короче, так как нет лямбды с реализацией trim, с другой стороны ranges::reverse_view не удовлетворяет условию contiguous_range, и теперь не получается создать из него string_view, только string

auto trim = views::transform(views::drop_while(::isspace) | views::reverse |
                             views::drop_while(::isspace) | views::reverse);
const string_view text = "Hello  \nC++  \n\n \n1\n 2\n 3 \n\n4 \n20!\n\n\n"sv;
ranges::filter_view words =
    text
    | views::split("\n"sv)
    | trim
    | views::filter([](auto s) { return !s.empty(); });
for (ranges::reverse_view w : words) {
    string s{w.begin(), w.end()};
    cout << quoted(s) << ", s.size() = " << s.size() << '\n';
}

Новый вариант: https://gcc.godbolt.org/z/vrEx146E1

Старый вариант: https://gcc.godbolt.org/z/1W8fhzPeG