split_view
class (стандартная библиотека C++)
Разбивает представление на подранги на основе разделителя. Разделитель может быть одним элементом или представлением элементов. Разделитель не является частью результирующего split_view
элемента.
Связанное lazy_split_view
представление — это класс. Основные различия между split_view
ними lazy_split_view
:
Представление | Может разделить const диапазон |
Тип диапазона |
---|---|---|
split_view |
no | Поддерживает forward_range или выше. |
lazy_split_view |
yes | Поддерживает input_range или выше. |
Предпочитайте split_view
, так как это более эффективно, если вы не должны разделить диапазон, который является const
.
Синтаксис
template<forward_range V, forward_range Pattern>
requires view<V> && view<Pattern> &&
indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to>
class split_view : public view_interface<split_view<V, Pattern>>;
Параметры шаблона
Pattern
Тип представления, указывающего последовательность разделителей.
V
Тип базового представления.
Просмотр характеристик
Описание следующих записей см. в разделе "Просмотр характеристик класса"
Characteristic | Description |
---|---|
Адаптер диапазона | views::split |
Базовый диапазон | То же, что и базовый диапазон |
Тип элемента | range_reference_t<V> |
Просмотр категории итератора | Удовлетворяет forward_range |
Размер | No |
Is const -iterable |
No |
Общий диапазон | Только если базовый диапазон удовлетворяет common_range |
Заимствуемый диапазон | No |
Участники
Функции-члены | Description |
---|---|
Конструкторы | Создайте представление. |
base C++20 |
Получение базового диапазона. |
begin C++20 |
Получите итератор к первому элементу. |
end C++20 |
Получите sentinel в конце представления. |
Наследуется от view_interface |
Description |
empty C++20 |
Проверьте, является ли представление пустым. |
front C++20 |
Получите первый элемент. |
operator bool C++20 |
Проверьте, не является ли представление пустым. |
Требования
Заголовок: <ranges>
(с C++20)
Пространство имен: std::ranges
Параметр компилятора: /std:c++20
или более поздней версии требуется.
Конструкторы
Создание экземпляра объекта split_view
1) split_view() requires default_initializable<V> && default_initializable<Pattern> = default;
2) constexpr split_view(V base, Pattern pattern);
3) template<input_range R> requires constructible_from<V, views::all_t<R>> &&
constructible_from<Pattern, single_view<range_value_t<R>>>
constexpr split_view(R&& rg, range_value_t<R> e);
Параметры
e
Один элемент, определяющий место разделения представления. Элемент не является частью результирующего представления.
base
Базовое представление.
pattern
Представление элементов, определяющих место разделения представления. Представление элементов не является частью результирующего представления.
rg
Диапазон для разделения.
Сведения о типах параметров шаблона см. в разделе "Параметры шаблона".
Возвращаемое значение
Экземпляр split_view
, содержащий один или несколько подрангов.
Замечания
Лучший способ создания split_view
— использовать views::split
адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются только в том случае, если вы хотите создать собственный тип пользовательского представления.
1) Создайте split_view
созданный по умолчанию объект. Базовое представление и pattern
построено по умолчанию. base()
возвращает копию V()
.
2) Создание split_view
путем разделения представления с помощью последовательности разделителей.
3) Создание split_view
, разделив представление с помощью одного разделителя.
Пример: split_view
.
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> rg{ 1, 2, 3, 1, 2, 3, 4, 5, 6 };
// pipe syntax using range adaptor
for (const auto& subrange : rg | std::views::split(3))
{
// outputs
// 1 2
// 1 2
// 4 5 6
for (const auto& elem : subrange)
{
std::cout << elem << ' ';
}
std::cout << '\n';
}
int delimiters[] = {2, 3};
for (auto splitRange : std::views::split(rg, delimiters)) // ctor syntax
{
for (auto& i : splitRange)
{
std::cout << i << " "; // 1 1 4 5 6
}
}
}
1 2
1 2
4 5 6
1 1 4 5 6
base
Получает копию базового представления.
// Uses a copy constructor to return the underlying view
1) constexpr V base() const & requires std::copy_constructible<V>;
// Uses a move constructor to return the underlying view
2) constexpr V base() &&;
Параметры
Нет.
Возвраты
Базовое представление.
begin
Получите итератор к первому элементу в представлении.
constexpr auto begin();
Параметры
Нет.
Возвращаемое значение
Итератор, указывающий на первый элемент в представлении.
end
Получите sentinel в конце представления.
constexpr auto end();
Параметры
Нет.
Возвращаемое значение
Sentinel, следующий за последним элементом в представлении:
См. также
<ranges>
split_view
адаптер диапазона
Класс lazy_split_view
Классы представления