◐ Shell
clean mode source ↗

#MAGICTITLESTRING# — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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)

1) split_view принимает view и разделитель, разделяя view на поддиапазоны по разделителю.

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().
(только для пояснения объект элемент*)

Методы

создает 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>) [править]
возвращает, не является ли производное представление пустым. Существует, если ranges::empty применимо к нему.
(public функция-элемент std::ranges::view_interface<D>) [править]

(C++20)

возвращает первый элемент в производном представлении. При условии, если оно удовлетворяет forward_range.
(public функция-элемент std::ranges::view_interface<D>) [править]

Вложенные классы

класс итератора
(класс-элемент только для пояснения)
класс охранного выражения
(класс-элемент только для пояснения)

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';
}

Вывод:

Сообщения об ошибках

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
WG не указан C++20 the old split_view был слишком ленив, чтобы его можно было легко использовать был переработан

Смотри также