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 |
---|---|
back C++20 |
Obtenha o último elemento na exibição derivada. |
data C++20 |
Obtenha um ponteiro para o primeiro elemento na exibição derivada. |
empty C++20 |
Teste se a exibição derivada está vazia. |
front C++20 |
Obtenha o primeiro elemento na exibição derivada. |
size C++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 bool C++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