#MAGICTITLESTRING#
| Определено в заголовочном файле <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) |
| Call signature |
||
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 моделирует соответствующие концепты.
Свойства
| Член класса | Определение |
view Базового типа V. (только для пояснения объект элемент of Внимание: Отображаемое название «#MAGICTITLESTRING#» переопределяет ранее заданное отображаемое название «<span style="font-size:0.7em; line-height:130%">std::ranges::</span><span style="font-size:0.7em; line-height:130%">views::</span>split, <span style="font-size:0.7em; line-height:130%">std::ranges::</span>split_view».*)
| |
Объект шаблона, который используется в качестве разделителя для разделения базового объекта view. (только для пояснения объект элемент*) | |
optional-like объект типа /*non-propagating-cache*/<ranges::subrange<ranges::iterator_t<V>>> который сохраняет результат первого вызова к begin(). (только для пояснения объект элемент*) | |
Методы
(C++20) |
создает split_view (public функция-элемент) |
(C++20) |
возвращает копию основного (адаптированного) представления (public функция-элемент) |
(C++20) |
возвращает итератор на начало (public функция-элемент) |
(C++20) |
возвращает итератор или охранное выражение указывающее на конец (public функция-элемент) |
(C++20) |
searches for the next occurrence of the pattern (функция-элемент только для пояснения) |
Унаследовано от ranges::view_interface | |
(C++20) |
возвращает является ли производное представление пустым. При условии, если это удовлетворяет sized_range или forward_range. (public функция-элемент std::ranges::view_interface<D>)
|
(C++23) |
возвращает константный итератор в начале диапазона. (public функция-элемент std::ranges::view_interface<D>)
|
(C++23) |
возвращает охранное выражение для константного итератора диапазона. (public функция-элемент std::ranges::view_interface<D>)
|
(C++20) |
возвращает, не является ли производное представление пустым. Существует, если ranges::empty применимо к нему. (public функция-элемент std::ranges::view_interface<D>)
|
(C++20) |
возвращает первый элемент в производном представлении. При условии, если оно удовлетворяет forward_range. (public функция-элемент std::ranges::view_interface<D>)
|
Вложенные классы
(C++20) |
класс итератора (класс-элемент только для пояснения) |
(C++20) |
класс охранного выражения (класс-элемент только для пояснения) |
Deduction guides
Заметки
До 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++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| WG не указан | C++20 | the old split_view был слишком ленив, чтобы его можно было легко использовать
|
был переработан |
Смотри также
view по поддиапазонам, полученным в результате разделения другого view с использованием разделителя (шаблон класса) (объект адаптера диапазона) | |
(C++20) |
view, состоящий из последовательности, полученной уплотнением view, состоящего из range (шаблон класса) (объект адаптера диапазона) |