Classe view_interface (Biblioteca Padrão C++)

A classe base para as classes de exibição no std::ranges namespace. Essa classe implementa parte da interface para tipos de exibição derivados. Use isso como a classe base para seus próprios tipos de exibição para reduzir o clichê que você precisa escrever.

Sintaxe

template<class Derived>
  requires std::is_class_v<Derived> && 
  std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;

Parâmetros de modelo

Derived
O tipo da classe que está derivando dessa classe base.

Membros

Funções de membro Descrição
backC++20 Obtenha o último elemento na exibição derivada.
dataC++20 Obtenha um ponteiro para o primeiro elemento na exibição derivada.
emptyC++20 Teste se a exibição derivada está vazia.
frontC++20 Obtenha o primeiro elemento na exibição derivada.
sizeC++20 Obtenha o número de elementos na visualização derivada.
Operadores Descrição
operator[]C++20 Obter o elemento na posição especificada.
operator boolC++20 Teste se a exibição derivada não está vazia.

Requisitos

Cabeçalho: <ranges> (desde C++20)

Namespace: std::ranges

Opção do compilador: /std:c++20 ou posterior é necessária.

back

Obtenha o último elemento na exibição derivada.

constexpr auto back()
    requires ranges::bidirectional_range<Derived> &&
    ranges::common_range<Derived>;

constexpr auto back() const
    requires ranges::bidirectional_range<const Derived> && 
    ranges::common_range<const Derived>;

Parâmetros

Nenhum.

Valor retornado

O último elemento na exibição derivada.

Comentários

A exibição derivada deve satisfazer bidirectional_range e common_range.
O comportamento de back() e front() são indefinidos para qualquer exibição vazia.

data

Obtenha um ponteiro para o primeiro elemento na exibição derivada.

constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
    requires ranges::range<const Derived> &&
    std::contiguous_iterator<ranges::iterator_t<const Derived>>;

Parâmetros

Nenhum.

Valor retornado

Um ponteiro para o primeiro elemento na exibição derivada.

Comentários

O iterador para a exibição derivada deve satisfazer contiguous_iterator.

empty

Teste se a exibição derivada está vazia.

1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;

Parâmetros

Nenhum.

Valor retornado

Retorna true se a exibição derivada não tiver elementos. Caso contrário, retorna false.

Comentários

A exibição derivada deve satisfazer std::ranges::forward_range.

front

Obtenha o primeiro elemento na exibição derivada.

constexpr auto front()
    requires ranges::forward_range<Derived>;
constexpr auto front() const
    requires ranges::forward_range<const Derived>;

Parâmetros

Nenhum.

Valor retornado

O último elemento na exibição derivada.

Comentários

A exibição derivada deve satisfazer forward_range.
O comportamento de front() é indefinido para std::ranges::empty_view.

size

Obtenha o número de elementos na visualização derivada.

constexpr auto size() requires ranges::forward_range<Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<Derived>,
    ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
    ranges::iterator_t<const Derived>>;

Parâmetros

Nenhum.

Valor retornado

O número de elementos na exibição derivada.

Comentários

O iterador para a exibição derivada deve satisfazer sized_sentinel_for.

operator[]

Obter o elemento na posição especificada.

template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

Parâmetros

pos
A posição, em relação ao iterador inicial, do elemento a ser retornado.

Valor retornado

O elemento na posição especificada em relação ao iterador inicial.

Comentários

A exibição derivada deve satisfazer random_access_range.
O comportamento desse operador é indefinido para std::ranges::empty_view.

Exemplo: operator[]

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

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::drop_view dv = std::views::drop(v, 2);

    for (auto e : dv)
    {
        std::cout << e << ' '; // 3 4 5
    }

    std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4

view_interface::operator bool

Teste se a exibição derivada não está vazia.

explicit constexpr operator bool();
explicit constexpr operator bool() const;

Parâmetros

Nenhum.

Valor retornado

Retorna false se a exibição derivada não tiver elementos (a exibição está vazia). Caso contrário, retorna true (a exibição não está vazia).

Comentários

O iterador para a exibição derivada deve satisfazer std::ranges::forward_iterator.
Esse operador é equivalente a !empty(). Isso torna conveniente escrever if (someRange) {...} para testar se há algo no intervalo para operar.
O comportamento desse operador é indefinido para std::ranges::empty_view.

Exemplo: operator bool

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

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });

    bool isNotEmpty = static_cast<bool>(fv);
    std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true

Confira também

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Ver aulas