Compartilhar via


Classe reverse_view (Biblioteca Padrão C++)

Uma exibição dos elementos de um intervalo em ordem inversa.

Sintaxe

template<ranges::view V>
requires ranges::bidirectional_range<V>
class reverse_view : public ranges::view_interface<reverse_view<V>>;

Parâmetros de modelo

V
O tipo da exibição subjacente.
Este tipo deve satisfazer ranges::bidirectional_range.

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::reverse
Intervalo subjacente Deve satisfazer bidirectional_range até random_access_range
Tipo de elemento O mesmo que o intervalo subjacente
Exibir categoria do iterador O mesmo que o intervalo subjacente
Tamanho Somente se o intervalo subjacente satisfizer sized_range
É const-iterável Somente se o intervalo subjacente for a common_view e satisfizer const-iterable
Faixa comum Sim
Alcance emprestado Somente se o intervalo subjacente satisfizer borrowed_range

Membros

Funções de membro Descrição
ConstrutoresC++20 Construa um reverse_view.
baseC++20 Obtenha o intervalo subjacente.
beginC++20 Obtenha um iterador para o primeiro elemento.
endC++20 Obtenha o sentinela no final do reverse_viewarquivo .
sizeC++20 Obtenha o número de elementos.
Herdado de view_interface Descrição
backC++20 Obtenha o último elemento.
emptyC++20 Testar se o reverse_view está vazio.
frontC++20 Obtenha o primeiro elemento.
operator[]C++20 Obter o elemento na posição especificada.
operator boolC++20 Teste se o reverse_view não está vazio.

Requisitos

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

Namespace: std::ranges

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

Construtores

Construa uma instância de um reverse_view a partir de uma exibição bidirecional.

1) reverse_view() requires default_initializable<V> = default; // default-constructs the underlying view
2) constexpr explicit reverse_view(V rg); // initializes the underlying view via std::move(r)

Parâmetros

rg
A exibição para fornecer uma visão invertida de.

Para obter informações sobre o tipo de parâmetro de modelo, consulte Parâmetros de modelo.

Valor retornado

Uma exibição do intervalo subjacente, em ordem inversa.

Comentários

A melhor maneira de criar um reverse_view é usando o adaptador de views::reverse 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.

1) O construtor padrão inicializa por padrão um reverse_viewarquivo .
2) Crie um reverse_view a partir da visualização especificada.

Exemplo: reverse_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 rv = v | std::views::reverse;
    
    for (auto e : rv) // 6 5 -4 3 2 1 0
    {
        std::cout << e << ' ';
    }
}
6 5 -4 3 2 1 0

base

Obtém uma cópia da exibição subjacente.

// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;

// Uses a move constructor to return the underlying view
constexpr V base() &&;

Parâmetros

Nenhum.

Valor retornado

A visão subjacente.

begin

Obtenha um iterador para o primeiro elemento no reverse_view.

1) constexpr reverse_iterator<iterator_t<V>> begin();
2) constexpr reverse_iterator<iterator_t<V>> begin() requires common_range<V>;
3) constexpr auto begin() const requires common_range<const V>;

Parâmetros

Nenhum.

Valor retornado

Um iterador que aponta para o primeiro elemento no reverse_view.

Imagem de um vetor com os elementos 10, 20 e 30. O primeiro elemento contém 10 e é rotulado begin(). O último elemento contém 30 e é rotulado como 'último elemento'. Uma caixa imaginária após o último elemento indica o sentinela e é rotulada como end().

Comentários

Após a primeira chamada para begin(), as chamadas subsequentes são executadas em tempo constante, O(1), não importa quantos elementos estejam no reverse_view. Isso tem implicações porque reverse_view armazena em cache o valor de last para que possa retorná-lo repetidamente de begin. Isso significa que você não deve reutilizar uma exibição depois que o contêiner subjacente for modificado. Se o intervalo subjacente for modificado, gere uma nova exibição, que é barata.

2) A exibição subjacente deve satisfazer common_range, o que significa que a exibição subjacente deve ter o mesmo tipo de iterador de início e fim.
3) A visão subjacente deve satisfazer common_range para que uma visão const itere sobre um const reverse_view.

end

Obtenha a sentinela no final do reverse_view

1) constexpr reverse_iterator<iterator_t<V>> end();
2) constexpr auto end() const requires common_range<const V>;

Parâmetros

Nenhum.

Valor retornado

A sentinela que segue o último elemento no reverse_view.

Imagem de um vetor com os elementos 10, 20 e 30. O primeiro elemento contém 10 e é rotulado begin(). O último elemento contém 30 e é rotulado como 'último elemento'. Uma caixa imaginária após o último elemento indica o sentinela e é rotulada como end().

Comentários

Para 2, a exibição subjacente deve atender common_range a uma exibição const, o que significa que a exibição subjacente deve ter o mesmo tipo de iterador de início e fim.

size

Obtenha o número de elementos.

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

Parâmetros

Nenhum.

Valor retornado

O número de elementos em reverse_view.

Comentários

O tamanho da exibição só estará disponível se o intervalo subjacente for um sized_range, ou em outras palavras, limitado.

Confira também

<ranges>
reverse adaptador de gama
Ver aulas