Compartilhar via


Classe take_view (Biblioteca Padrão C++)

Uma visualização dos primeiros N elementos de outra visualização.

Sintaxe

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

Parâmetros de modelo

V
O tipo do intervalo subjacente.

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::take
Intervalo subjacente Qualquer intervalo
Tipo de elemento O mesmo que o intervalo subjacente
Exibir categoria do iterador O mesmo que o intervalo subjacente
Tamanho Não
É const-iterável Somente se o intervalo subjacente for const iterável
Faixa comum Somente se o intervalo subjacente satisfizer random_access_range e sized_range
Alcance emprestado Somente se o intervalo subjacente for borrowed_range

Membros

Funções de membro Descrição
Construtores Construa a exibição.
baseC++20 Obtenha o intervalo subjacente.
beginC++20 Obtenha um iterador para o primeiro elemento.
endC++20 Pegue a sentinela no final da vista.
sizeC++20 Obtenha o número de elementos. O intervalo subjacente deve satisfazer sized_range.
Herdado de view_interface Descrição
backC++20 Obtenha o último elemento.
dataC++20 Obtenha um ponteiro para o primeiro elemento.
emptyC++20 Teste se a exibição está vazia.
frontC++20 Obtenha o primeiro elemento.
operator[]C++20 Obter o elemento na posição especificada.
operator boolC++20 Teste se a exibição 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.

Construtores

Construir uma instância de um take_view

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

Parâmetros

base
A visão subjacente.

count
O número de elementos a serem retirados da frente da exibição subjacente. Se count for maior que o número de elementos na exibição subjacente, a exibição conterá todos os elementos no intervalo subjacente.

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

Valor retornado

A take_view, que é uma visualização dos primeiros N elementos de outra visualização. Se você especificar mais elementos a serem descartados do que existem no intervalo subjacente, an empty_view será retornado.

Comentários

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

1) Crie um take_view que não tenha elementos. A exibição subjacente é construída por padrão. base() retorna uma cópia do V().
2) Crie um take_view a partir de um base e uma contagem. base é movido via std::move().

Se count for menor que o número de elementos no intervalo subjacente, determina count o tamanho do take_view.
Se count for maior que o número de elementos no intervalo subjacente, o take_view incluirá todos os elementos no intervalo subjacente.

Exemplo: 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

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

// 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() &&;

Parâmetros

Nenhum.

Valor retornado

A visão subjacente.

begin

Obtenha um iterador para o primeiro elemento na exibição.

constexpr auto begin() requires (!Simple_view<V>);
constexpr auto begin() const requires range<const V>;

Parâmetros

Nenhum.

Valor retornado

Um iterador apontando para o primeiro elemento na exibição.

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 1, o Simple_view<V> requisito significa que a exibição V e const V deve ter os mesmos tipos de iterador e sentinela.

end

Pegue a sentinela no final da vista.

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

Parâmetros

Nenhum.

Valor retornado

A sentinela que segue o último elemento na exibição.

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 1, o Simple_view<V> requisito significa que a exibição V e const V deve ter os mesmos tipos de iterador e sentinela.

size

Obtenha o número de elementos.

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

Parâmetros

Nenhum.

Valor retornado

O número de elementos em take_view.
Se o take_view foi construído com um explícito count:

  • if count for menor que o número de elementos no intervalo subjacente, ele será retornado como o tamanho da exibição.
  • Se count for maior que o número de elementos no intervalo subjacente, o tamanho da exibição será ranges::size(base).

Confira também

<ranges>
take adaptador de gama
Ver aulas