Поделиться через


take_view class (стандартная библиотека C++)

Представление первых N-элементов из другого представления.

Синтаксис

template<view V>
class take_view : public view_interface<take_view<V>>;

Параметры шаблона

V
Тип базового диапазона.

Просмотр характеристик

Описание следующих записей см. в разделе "Просмотр характеристик класса"

Characteristic Description
Адаптер диапазона views::take
Базовый диапазон Любой диапазон
Тип элемента Совпадает с базовым диапазоном
Просмотр категории итератора Совпадает с базовым диапазоном
Размер No
Is const-iterable Только в том случае, если базовый диапазон является const итерируемым
Общий диапазон Только если базовый диапазон удовлетворяет random_access_range и sized_range
Заимствуемый диапазон Только в том случае, если базовый диапазон имеет значение borrowed_range

Участники

Функции-члены Description
Конструкторы Создайте представление.
baseC++20 Получение базового диапазона.
beginC++20 Получите итератор к первому элементу.
endC++20 Получите sentinel в конце представления.
sizeC++20 Получение количества элементов. Базовый диапазон должен удовлетворять sized_range.
Наследуется от view_interface Description
backC++20 Получите последний элемент.
dataC++20 Получите указатель на первый элемент.
emptyC++20 Проверьте, является ли представление пустым.
frontC++20 Получите первый элемент.
operator[]C++20 Получите элемент в указанной позиции.
operator boolC++20 Проверьте, не является ли представление пустым.

Требования

Заголовок: <ranges> (с C++20)

Пространство имен: std::ranges

Параметр компилятора: /std:c++20 или более поздней версии требуется.

Конструкторы

Создание экземпляра объекта take_view

1) take_view() requires default_initializable<V> = default;
2) constexpr take_view(V base, range_difference_t<V> count);

Параметры

base
Базовое представление.

count
Количество элементов, которые нужно взять с передней части базового представления. Если count в базовом представлении больше числа элементов, представление будет содержать все элементы в базовом диапазоне.

Сведения о типе параметра шаблона см. в разделе "Параметры шаблона".

Возвращаемое значение

take_viewпредставление первых N-элементов из другого представления. Если указать больше элементов, которые нужно удалить, чем существует в базовом диапазоне, empty_view возвращается.

Замечания

Лучший способ создания take_view — использовать views::take адаптер диапазона. Адаптеры диапазона — это способ создания классов представления. Типы представлений предоставляются только в том случае, если вы хотите создать собственный тип пользовательского представления.

1) Создание элемента take_view без элементов. Базовое представление создается по умолчанию. base() возвращает копию V().
2) Создание из take_view base числа и числа. base перемещается через std::move().

Если count число элементов в базовом диапазоне меньше, определяет count размер элемента take_view.
Если count число элементов в базовом диапазоне больше, то take_view включает все элементы в базовом диапазоне.

Пример: take_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{0, 1, 2, 3, 4, 5, 6};
   
    auto newView = std::views::take(v, 3);
    
    for (auto& e : newView)
    {
        std::cout << e << ' '; // 0 1 2
    }
    std::cout << '\n';

    // Use the '|' operator to create a take_view
    for (auto i : v | std::views::take(3))
    {
        std::cout << i << ' '; // 0 1 2
    }
}
0 1 2
0 1 2

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() requires (!Simple_view<V>);
constexpr auto begin() const requires range<const V>;

Параметры

Нет.

Возвращаемое значение

Итератор, указывающий на первый элемент в представлении.

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

Замечания

Для 1 требование означает, Simple_view<V> что представление V и const V должно иметь одинаковые итераторы и типы sentinel.

end

Получите sentinel в конце представления.

1) constexpr auto end() requires !(Simple_view<V>);
2) constexpr auto end() const requires range<const V>;

Параметры

Нет.

Возвращаемое значение

Sentinel, следующий за последним элементом в представлении.

Изображение вектора с элементами 10, 20 и 30. Первый элемент содержит 10 и помечен как begin(). Последний элемент содержит 30 и помечен как последний элемент. Мнимый прямоугольник после последнего элемента указывает sentinel и обозначает конец().

Замечания

Для 1 требование означает, Simple_view<V> что представление V и const V должно иметь одинаковые итераторы и типы sentinel.

size

Получение количества элементов.

constexpr auto size() requires sized_range<V>;
constexpr auto size() const requires sized_range<const V>;

Параметры

Нет.

Возвращаемое значение

Число элементов в массиве take_view.
Если он take_view был создан явным countобразом:

  • Если count значение меньше числа элементов в базовом диапазоне, оно возвращается в качестве размера представления.
  • Значение , если count больше числа элементов в базовом диапазоне, то размер представления равен ranges::size(base).

См. также

<ranges>
take адаптер диапазона
Классы представления