История изменений
Исправление 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