Condividi tramite


iota_view classe (libreria standard C++)

Genera una visualizzazione di una sequenza di elementi incrementando ripetutamente un valore iniziale. La sequenza può essere delimitata o non associata.

Sintassi

template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
    requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;

Parametri del modello

W
Tipo dei valori nella sequenza. Il tipo specificato deve supportare operator++.

Bound
Tipo del valore finale. Se Bound è std::unreachable_sentinel_t (il valore predefinito), la vista non è associato.

Visualizzare le caratteristiche

Per una descrizione delle voci seguenti, vedere Visualizzare le caratteristiche della classe

Caratteristica Descrizione
Adattatore di intervallo views::iota
Intervallo sottostante Non applicabile perché questa vista genera i relativi membri
Tipo di elemento Uguale al parametro del modello W
Visualizzare la categoria iteratore Supporta input_range fino a random_access_range, a seconda del tipo di W
Dimensioni Solo se l'intervallo ha un valore finale, ovvero non è una serie infinita
Iterabile const
Intervallo comune Solo se Bound è lo stesso tipo di W
Intervallo preso in prestito

Membri

Funzioni membro Descrizione
Costruttori C++20 Costruisci la vista.
beginC++20 Ottenere un iteratore al primo elemento.
endC++20 Ottenere l'sentinel alla fine della visualizzazione.
sizeC++20 Ottiene il numero di elementi.
Ereditato da view_interface Descrizione
backC++20 Ottiene l'ultimo elemento.
emptyC++20 Verificare se la visualizzazione è vuota.
frontC++20 Ottenere il primo elemento.
operator[]C++20 Ottiene l'elemento nella posizione specificata.
operator boolC++20 Verificare se la visualizzazione non è vuota.

Osservazioni:

Un buon modo per creare un iota_view oggetto consiste nell'usare l'adattatore iota di intervallo. Gli adattatori di intervallo sono il modo previsto per creare classi di visualizzazione. I tipi di visualizzazione vengono esposti nel caso in cui si voglia creare un tipo di visualizzazione personalizzato.

La sequenza di valori può essere costituita da valori integrali, ad esempio 1,2,3 o 'a', 'b', 'c' o elementi consecutivi di un intervallo.

Questa vista viene in genere usata per scorrere una serie di valori. Ad esempio:

for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
    std::cout << i << ’ ’; // 1 2 3 4 5 6 7 8 9
}

Requisiti

Intestazione: <ranges> (da C++20)

Spazio dei nomi: std::ranges

Opzione del compilatore: /std:c++20 o versione successiva è obbligatoria.

Costruttori

Creare un'istanza di un oggetto iota_view.

1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );

Parametri

value
Valore iniziale per la serie.

bound
Limite della serie. Si tratta di un valore maggiore dell'ultimo valore della serie.

Per informazioni sul tipo di parametro del modello, vedere Parametri del modello.

Osservazioni:

1) Creare un oggetto iota_view con un valore iniziale e finale determinato dal tipo di Wmodello inizializzato predefinito .
2) Creare un oggetto iota_view con il valore iniziale specificato e il valore finale determinato dal tipo Winizializzato valore .
3) Creare un oggetto delimitato iota_view con il valore iniziale e il valore finale specificati. Il valore finale è minore dell'ultimo valore specificato.
4) Usato per creare visualizzazioni secondarie. Ad esempio, std::ranges::iota_view(start, end); dove start e end sono iteratori all'inizio e alla fine della visualizzazione secondaria.

Anziché creare direttamente questa classe, un modo semplice per creare un iota_view oggetto consiste nell'usare l'adattatore iota di intervallo. Gli adattatori di intervallo sono il modo previsto per creare classi di visualizzazione. I tipi di visualizzazione vengono esposti nel caso in cui si voglia creare un tipo di visualizzazione personalizzato.

Se il tipo del limite è unreachable_sentinel_t, la vista risultante viene delimitata.

Quando si utilizza uno dei costruttori che inizializzano il valore associato, il limite sarà il valore inizializzato predefinito per tale tipo. Ad esempio, iota_view<int, int>{} è un intervallo vuoto di int poiché il valore int costruito predefinito e associato sono entrambi 0. Inoltre, iota_view<int, int>{-4} perché -4, -3, -2, -1 l'associazione costruita int per impostazione predefinita è 0.

iota_view esempio di costruttore

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

int main()
{
    std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0 
    std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
    std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
    
    std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
    auto start = std::ranges::find(v, 35);
    auto end = std::ranges::find(v, 82);
    for (auto &&val : std::ranges::iota_view(start, end))
    {
        std::cout << *val << ' '; // outputs 35 45 50 66 77
    }
}

begin

Ottiene un iteratore al primo elemento nella visualizzazione.

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

Parametri

Nessuna.

Valore restituito

Iteratore che punta al primo elemento della visualizzazione.

end

Ottenere l'endpoint sentinel alla fine della visualizzazione.

constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;

Parametri

Nessuna.

Valore restituito

Se l'oggetto iota_view non è associato, restituisce std::unreachable_sentinel.

Se l'oggetto iota_view è delimitato, restituisce un iteratore che punta alla sentinel oltre l'ultimo valore della sequenza.

size

Ottiene il numero di elementi nella visualizzazione. L'oggetto iota_view deve essere associato.

constexpr auto size() requires
    (same_as<W, Bound> && advanceable <W>) ||
    (integral<W> && integral<Bound>) ||
    sized_sentinel_for<Bound, W>;

Parametri

Nessuna.

Valore restituito

Numero di elementi in iota_view.

Osservazioni:

Non è possibile chiamare size() su un oggetto non associato iota_view.

Vedi anche

<ranges>
iota() adattatore di intervallo
std::numerics::iota
classi di visualizzazione