std::ranges:: views:: split, std::ranges:: split_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
ranges::
forward_range
V,
ranges::
forward_range
Pattern
>
requires
ranges::
view
<
V
>
&&
|
(1) | (начиная с C++20) |
|
namespace
views
{
inline
constexpr
/* unspecified */
split
=
/* unspecified */
;
|
(2) | (начиная с C++20) |
|
Сигнатура вызова
|
||
|
template
<
ranges::
viewable_range
R,
class
Pattern
>
requires
/* see below */
|
(начиная с C++20) | |
|
template
<
class
Pattern
>
constexpr /* range adaptor closure */ split ( Pattern && pattern ) ; |
(начиная с C++20) | |
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
моделирует соответствующие концепты.
В отличие от
lazy_split_view
,
split_view
сохраняет непрерывность поддиапазона, что делает его подходящим для разделения строк.
Содержание |
Члены данных
| Член | Описание |
V
base_
(private)
|
базовое (адаптированное)
view
( объект-член только для демонстрации* ) |
Pattern
pattern_
(private)
|
объект-шаблон, используемый в качестве разделителя для разбиения базового
view
( объект-член только для демонстрации* ) |
non-propagating-cache
<
ranges::
subrange
<
ranges::
iterator_t
<
V
>>>
cached_begin_
(private)
|
объект, кэширующий результат первого вызова
begin()
( объект-член только для демонстрации* ) |
Функции-члены
создает
split_view
(публичная функция-член) |
|
|
возвращает копию базового (адаптированного) представления
(публичная функция-член) |
|
|
возвращает итератор на начало
(публичная функция-член) |
|
|
возвращает итератор или страж на конец
(публичная функция-член) |
|
|
ищет следующее вхождение шаблона
( функция-член только для демонстрации* ) |
|
Наследуется от std::ranges::view_interface |
|
возвращает, является ли производное представление пустым, предоставляется только если оно удовлетворяет
sized_range
или
forward_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
возвращает константный итератор на начало диапазона
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
(C++23)
|
возвращает страж для константного итератора диапазона
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает, является ли производное представление непустым, предоставляется только если
ranges::empty
применимо к нему
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет
forward_range
(публичная функция-член
std::ranges::view_interface<D>
)
|
|
Вложенные классы
|
тип итератора
( класс-член только для демонстрации* ) |
|
|
тип сторожа
( класс-член только для демонстрации* ) |
Руководства по выводу
Примечания
До
P2210R2
,
split_view
использовал
ленивый
механизм разделения, и поэтому не мог сохранять двунаправленные, произвольного доступа или непрерывные свойства базового представления, или сделать тип итератора внутреннего диапазона таким же, как у базового представления. В результате он был переработан в
P2210R2
, и ленивый механизм был перенесён в
lazy_split_view
.
Разделитель
pattern
обычно не должен быть обычным строковым литералом, так как он будет считать нулевой терминатор необходимой частью разделителя; поэтому рекомендуется использовать литерал
std::string_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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2210R2 | C++20 |
старый
split_view
был слишком ленивым для удобного использования
|
он был переработан |
Смотрите также
представление
view
над поддиапазонами, полученными при разделении другого
view
с использованием разделителя
(шаблон класса) (объект адаптера диапазона) |
|
|
(C++20)
|
представление
view
состоящее из последовательности, полученной при слиянии
view
из
range
s
(шаблон класса) (объект адаптера диапазона) |