Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Разбивает представление на подранги на основе разделителя. Разделитель может быть одним элементом или представлением элементов. Разделитель не является частью результирующего 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 |
|---|---|
| Конструкторы | Создайте представление. |
baseC++20 |
Получение базового диапазона. |
beginC++20 |
Получите итератор к первому элементу. |
endC++20 |
Получите sentinel в конце представления. |
Наследуется от view_interface |
Description |
emptyC++20 |
Проверьте, является ли представление пустым. |
frontC++20 |
Получите первый элемент. |
operator boolC++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
Классы представления