Sdílet prostřednictvím


iota_view class (standardní knihovna jazyka C++)

Vygeneruje zobrazení posloupnosti prvků opakovaným zvýšením počáteční hodnoty. Posloupnost může být ohraničená nebo nevázaná.

Syntaxe

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>>;

Parametry šablony

W
Typ hodnot v sekvenci. Zadaný typ musí podporovat operator++.

Bound
Typ koncové hodnoty. Pokud Bound je std::unreachable_sentinel_t (výchozí hodnota), je zobrazení nevázané.

Zobrazení charakteristik

Popis následujících položek naleznete v tématu Zobrazení vlastností třídy.

Charakteristika Popis
Adaptér rozsahu views::iota
Podkladová oblast Nelze použít, protože toto zobrazení generuje jeho členy.
Typ elementu Stejné jako parametr šablony W
Zobrazit kategorii iterátoru Podporuje input_rangerandom_access_range, v závislosti na typu W
Tříděný Pouze pokud má oblast koncovou hodnotu, to znamená, že se nejedná o nekonečnou řadu.
Je const-iterable Ano
Společný rozsah Pouze pokud Bound je stejný typ jako W
Zapůjčený rozsah Ano

Členové

Členské funkce Popis
Konstruktory C++20 Vytvořte zobrazení.
beginC++20 Získejte iterátor k prvnímu prvku.
endC++20 Získejte sentinel na konci zobrazení.
sizeC++20 Získá počet prvků.
Zděděno z view_interface Popis
backC++20 Získejte poslední prvek.
emptyC++20 Otestujte, jestli je zobrazení prázdné.
frontC++20 Získejte první prvek.
operator[]C++20 Získejte prvek na zadané pozici.
operator boolC++20 Otestujte, jestli zobrazení není prázdné.

Poznámky

Dobrým způsobem vytvoření je iota_view použití adaptéru rozsahu iota . Adaptéry rozsahu představují zamýšlený způsob vytváření tříd zobrazení. Typy zobrazení jsou vystaveny pro případ, že chcete vytvořit vlastní typ zobrazení.

Posloupnost hodnot může být celočíselné hodnoty, například 1,2,3 nebo "a", "b", "c" nebo po sobě jdoucí prvky z oblasti.

Toto zobrazení se obvykle používá k iteraci nad řadou hodnot. Příklad:

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
}

Požadavky

Hlavička: <ranges> (od C++20)

Obor názvů: std::ranges

Je vyžadována možnost kompilátoru: /std:c++20 nebo novější.

Konstruktory

Vytvořte instanci objektu 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 );

Parametry

value
Počáteční hodnota pro řadu.

bound
Hranice řady. Je to jedna větší než poslední hodnota v řadě.

Informace o typu parametru šablony naleznete v tématu Parametry šablony.

Poznámky

1) Vytvořte počáteční iota_view a koncovou hodnotu určenou výchozím inicializovaným typem Wšablony .
2) Vytvořte se zadanou iota_view počáteční hodnotou a koncovou hodnotou určenou inicializovaným typem Whodnoty .
3) Vytvořte hranici iota_view se zadanou počáteční hodnotou a koncovou hodnotou. Koncová hodnota je menší než poslední zadaná hodnota.
4) Slouží k vytváření dílčích zobrazení. Například kde std::ranges::iota_view(start, end); start a end jsou iterátory na začátek a konec dílčího zobrazení.

Místo přímého vytvoření této třídy je snadný způsob, jak vytvořit iota_view , pomocí adaptéru rozsahu iota . Adaptéry rozsahu představují zamýšlený způsob vytváření tříd zobrazení. Typy zobrazení jsou vystaveny pro případ, že chcete vytvořit vlastní typ zobrazení.

Pokud je unreachable_sentinel_ttyp vazby , výsledné zobrazení je ohraničeno.

Pokud použijete jeden z konstruktorů, které inicializuje vazbu, bude vázána výchozí inicializovaná hodnota pro daný typ. Například je prázdný rozsahint, iota_view<int, int>{} protože výchozí hodnota typu int a svázaná jsou obě 0. Je to také proto, iota_view<int, int>{-4} -4, -3, -2, -1 že výchozí konstruovaná int vazba je 0.

iota_view příklad konstruktoru

// 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

Získejte iterátor k prvnímu prvku v zobrazení.

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

Parametry

Žádná

Vrácená hodnota

Iterátor ukazující na první prvek v zobrazení.

end

Získejte koncový sentinel na konci zobrazení.

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

Parametry

Žádná

Vrácená hodnota

iota_view Pokud je nevázaný, vrátí hodnotu std::unreachable_sentinel.

Pokud je ohraničený iota_view , vrátí iterátor odkazující na sentinel za poslední hodnotu v sekvenci.

size

Získejte počet prvků v zobrazení. Musí iota_view být svázán.

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

Parametry

Žádná

Vrácená hodnota

Počet prvků v souboru iota_view.

Poznámky

Nemůžete volat size() na nevázanou iota_viewkomunikaci .

Viz také

<ranges>
iota() adaptér rozsahu
std::numerics::iota
zobrazit třídy