Compartilhar via


Classe empty_view (Biblioteca Padrão C++)

Uma vista sem elementos. Essa exibição é útil para fins de teste, como chamar o código que precisa ser fornecido com uma exibição, mas não precisa acessar seus dados subjacentes.

Sintaxe

template<class T>
    requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;

Parâmetros de modelo

T
O tipo do elemento. Mesmo que não haja elementos em um empty_view, todos os intervalos são homogêneos. Ou seja, eles têm elementos de um tipo particular. Portanto, mesmo que an empty_view não tenha elementos, ele ainda tem um tipo, como um empty_view de int, ou strings, etc.

Ver características

Para obter uma descrição das entradas a seguir, consulte Exibir características da classe

Característica Descrição
Adaptador de gama views::empty
Intervalo subjacente Nenhum
Tipo de elemento Conforme especificado quando o empty_view é criado
Exibir categoria do iterador contiguous_range
Tamanho Sim. Sempre retorna 0
É const-iterável Sim
Faixa comum Sim
Alcance emprestado Sim

Membros

Funções de membro Descrição
ConstrutoresC++20 Constrói um empty_view.
beginC++20 Retorna nullptr.
endC++20 Retorna nullptr.
sizeC++20 Retorna 0
Herdado de view_interface Descrição
backC++20 Resulta em comportamento indefinido.
dataC++20 Retorna nullptr.
emptyC++20 Retorna true.
frontC++20 Resulta em comportamento indefinido.
operator[]C++20 Resulta em comportamento indefinido.
operator boolC++20 Retorna false.

Comentários

A melhor maneira de criar um empty_view é usando o adaptador de empty intervalo. Os adaptadores de intervalo são a maneira pretendida de criar classes de exibição. Os tipos de exibição são expostos caso você queira criar seu próprio tipo de exibição personalizado.

Como nunca pode haver nenhum elemento em um empty_view, certas otimizações do compilador são possíveis. Por exemplo, o compilador eliminará for (auto e : std::views::empty<int>) {...} porque sabe que não há nada para iterar.

Outro uso para empty_view é dividir a split_view com um empty_view delimitador, o que resulta em um intervalo de intervalos de elemento único.

Requisitos

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

Namespace: std::ranges

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

Construtores

Crie uma instância de uma empty_view.

template<class T>
inline constexpr empty_view<T> empty{};

Parâmetros

T
O tipo do elemento subjacente, do qual não há nenhum.

Comentários

A melhor maneira de criar um empty_view é usando o adaptador de empty intervalo.

Exemplo empty_view

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

int main()
{
    auto anEmptyView = std::views::empty<int>;
    bool isNotEmpty = (bool)anEmptyView;
    std::cout << std::boolalpha << isNotEmpty << "\n"; // false
    std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true

back

Resulta em comportamento indefinido.

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

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

Parâmetros

Nenhum.

Valor retornado

Nenhum.

Comentários

Chamar essa função em uma compilação de depuração gera uma afirmação de que a função foi chamada em um arquivo .view_interface

begin

Retorna nullptr porque não há um primeiro elemento na exibição.

static constexpr T* begin() noexcept

Valor retornado

nullptr

data

Retorna nullptr porque não há um primeiro elemento na exibição para o qual obter um ponteiro.

static constexpr T* data() noexcept

Valor retornado

nullptr.

empty

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

static constexpr bool empty() noexcept

Parâmetros

Nenhum.

Valor retornado

Retorna true.

end

Retorna nullptr porque não há nenhum elemento na exibição.

static constexpr T* end() noexcept

Valor retornado

nullptr.

front

Resulta em comportamento indefinido.

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

Parâmetros

Nenhum.

Valor retornado

Nenhum.

Comentários

Chamar essa função em uma compilação de depuração gera uma afirmação de que a função foi chamada em um arquivo .view_interface

operator[]

Resulta em comportamento indefinido.

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

template<ranges::random_access_range R = const T>
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

Nenhum.

Comentários

Chamar essa função em uma compilação de depuração gera uma afirmação de que o índice está fora do intervalo para view_interface.

operator bool

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

constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };

constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };

Parâmetros

Nenhum.

Valor retornado

Retorna false.

Exemplo (bool)

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

int main()
{
    auto anEmptyView = std::views::empty<int>;

    if (anEmptyView) // check if anEmptyView isn't empty
    {
        std::cout << "Error: why does an empty_view have elements?\n";
    }
    else
    {
        std::cout << "Correct: an empty_view is not not empty\n";
    }
}
Correct: an empty_view is not not empty

size

Obtenha o número de elementos na exibição, que sempre será 0.

static constexpr size_t size()

Parâmetros

Nenhum.

Valor retornado

0.

Confira também

<ranges>
empty adaptador de gama
single_view
Ver aulas