std::ranges::views::split, std::ranges::split_view
Определено в заголовке <ranges> | ||
|---|---|---|
template< ranges::forward_range V, ranges::forward_range Pattern >
requires ranges::view<V> &&
ranges::view<Pattern> &&
std::indirectly_comparable<ranges::iterator_t<V>,
ranges::iterator_t<Pattern>,
ranges::equal_to>
class split_view
: public ranges::view_interface<split_view<V, Pattern>>
| (1) | (с C++20) |
namespace views {
inline constexpr /* unspecified */ split = /* unspecified */;
}
| (2) | (с C++20) |
| Подпись вызова | ||
template< ranges::viewable_range R, class Pattern >
requires /* see below */
constexpr ranges::view auto split( R&& r, Pattern&& pattern );
| (с C++20) | |
template< class Pattern > constexpr /* range adaptor closure */ split( Pattern&& pattern ); | (с C++20) |
views::split(e, p) эквивалентно выражению split_view(e, p) для любых подходящих подвыражений e и p. split_view моделирует концепции forward_range и common_range, если базовый view V моделирует соответствующие концепции.
Внутренний диапазон (ranges::range_reference_t<split_view>) — это ranges::subrange<ranges::iterator_t<V>>, который моделирует common_range, моделирует sized_range, если ranges::iterator_t<V> моделирует std::sized_sentinel_for<ranges::iterator_t<V>>, и моделирует contiguous_range, random_access_range, bidirectional_range и forward_range, если V моделирует соответствующие концепции.
Члены данных
| Член данных | Определение |
|---|---|
base_ (приватный) | Базовый view типа V.(член объекта только для демонстрации*) |
pattern_ (приватный) | Объект шаблона, используемый в качестве разделителя для разбиения базового view.(член объекта только для демонстрации*) |
cached_begin_ (приватный) | подобный опциональному объект типа /*non-propagating-cache*/<ranges::subrange<ranges::iterator_t<V>>>, который кэширует результат первого вызова begin().(член объекта только для демонстрации*) |
Члены-функции
|
(C++20) | Конструирует split_view (публичная функция-член) |
|
(C++20) | Возвращает копию базового (адаптированного) представления (публичная функция-член) |
|
(C++20) | Возвращает итератор начала (публичная функция-член) |
|
(C++20) | Возвращает итератор или разделитель конца (публичная функция-член) |
|
(C++20) | Ищет следующее вхождение шаблона (функция-член только для демонстрации*) |
Наследуется от |
|
|
(C++20) | Возвращает, пусто ли производное представление. Предоставляется, если оно удовлетворяет sized_range или forward_range. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++23) | Возвращает постоянный итератор начала диапазона. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++23) | Возвращает разделитель для постоянного итератора диапазона. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++20) | Возвращает, не пусто ли производное представление. Предоставляется, если ranges::empty применимо к нему. (публичная функция-член std::ranges::view_interface<D>) |
|
(C++20) | Возвращает первый элемент в производном представлении. Предоставляется, если оно удовлетворяет forward_range. (публичная функция-член std::ranges::view_interface<D>) |
Вложенные классы
|
(C++20) | Тип итератора (вложенный класс только для демонстрации*) |
|
(C++20) | Тип разделителя (вложенный класс только для демонстрации*) |
Руководства по выводу типов
Примечания
До P2210R2, split_view использовал ленивый механизм разделения, и поэтому не мог сохранить двунаправленные, произвольные или непрерывные свойства базового представления, или сделать тип итератора внутреннего диапазона таким же, как у базового представления. Соответственно, он был переработан в P2210R2, а ленивый механизм перемещен в lazy_split_view.
Пример
#include <iomanip>
#include <iostream>
#include <ranges>
#include <string_view>
int main()
{
using std::operator""sv;
constexpr auto words{"Hello^_^C++^_^20^_^!"sv};
constexpr auto delim{"^_^"sv};
for (const auto word : std::views::split(words, delim))
// with string_view's C++23 range constructor:
std::cout << std::quoted(std::string_view(word)) << ' ';
std::cout << '\n';
}Вывод:
"Hello" "C++" "20" "!"
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение как опубликовано | Правильное поведение |
|---|---|---|---|
| P2210R2 | C++20 | старое split_view было слишком ленивым, чтобы его легко использовать | он переработан |
См. также
|
(C++20) | адаптер диапазона, работающий над поддиапазонами, полученными путем разделения другого диапазона с помощью разделителя (шаблон класса) (объект адаптера диапазона) |
|
(C++20) | адаптер диапазона, представляющий последовательность, полученную путем сглаживания диапазона диапазонов (шаблон класса) (объект адаптера диапазона) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/split_view