Udostępnij za pośrednictwem


iota_view class (Standardowa biblioteka C++)

Generuje widok sekwencji elementów przez wielokrotne zwiększanie wartości początkowej. Sekwencja może być powiązana lub niezwiązana.

Składnia

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 szablonu

W
Typ wartości w sekwencji. Określony typ musi obsługiwać element operator++.

Bound
Typ wartości końcowej. Jeśli Bound to std::unreachable_sentinel_t (wartość domyślna), widok jest niezwiązany.

Właściwości widoku

Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)

Characteristic opis
Adapter zakresu views::iota
Zakres bazowy Nie dotyczy, ponieważ ten widok generuje jego członków
Typ elementu Tak samo jak parametr szablonu W
Wyświetl kategorię iteratora Obsługuje input_range do random_access_range, w zależności od typu W
Wielkości Tylko wtedy, gdy zakres ma wartość końcową, czyli nie jest to nieskończona seria
Jest constiterowalne Tak
Wspólny zakres Tylko wtedy, gdy Bound jest to ten sam typ co W
Pożyczony zakres Tak

Elementy członkowskie

Funkcje składowe Opis
Konstruktory C++20 Skonstruuj widok.
beginC++20 Pobierz iterator do pierwszego elementu.
endC++20 Pobierz element sentinel na końcu widoku.
sizeC++20 Pobierz liczbę elementów.
Dziedziczone z view_interface Opis
backC++20 Pobierz ostatni element.
emptyC++20 Sprawdź, czy widok jest pusty.
frontC++20 Pobierz pierwszy element.
operator[]C++20 Pobierz element na określonej pozycji.
operator boolC++20 Sprawdź, czy widok nie jest pusty.

Uwagi

Dobrym sposobem na utworzenie elementu iota_view jest użycie adaptera iota zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.

Sekwencja wartości może być wartościami całkowitymi, takimi jak 1,2,3 lub "a", "b", "c" lub kolejne elementy z zakresu.

Ten widok jest zwykle używany do iterowania serii wartości. Na przykład:

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
}

Wymagania

Nagłówek: <ranges> (od C++20)

Przestrzeń nazw: std::ranges

Opcja kompilatora: /std:c++20 lub nowsza jest wymagana.

Konstruktory

Utwórz wystąpienie klasy 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
Wartość początkowa serii.

bound
Granica serii. Jest to jedna większa niż ostatnia wartość z serii.

Aby uzyskać informacje o typie parametru szablonu, zobacz Parametry szablonu.

Uwagi

1) Utwórz obiekt iota_view z wartością początkową i końcową określoną przez domyślny typ Wszablonu zainicjowanego.
2) Utwórz element iota_view z określoną wartością początkową i wartością końcową określoną przez typ Wzainicjowany przez wartość .
3) Utwórz granicę iota_view z określoną wartością początkową i wartością końcową. Wartość końcowa jest mniejsza niż określona ostatnia wartość.
4) Służy do tworzenia widoków podrzędnych. Na przykład std::ranges::iota_view(start, end); gdzie start i end są iteratorami do początku i końca widoku podrzędnego.

Zamiast bezpośrednio tworzyć tę klasę, można łatwo utworzyć obiekt iota_view przy użyciu adaptera iota zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.

Jeśli typ ograniczenia to unreachable_sentinel_t, wynikowy widok jest ograniczony.

Jeśli używasz jednego z konstruktorów, które wartość inicjuje granicę, granica będzie wartością domyślną zainicjowaną dla tego typu. Na przykład jest pustym zakresem wartości, iota_view<int, int>{} ponieważ wartość domyślna skonstruowana int i powiązana są zarówno 0.int Ponadto jest -4, -3, -2, -1 to spowodowane tym, iota_view<int, int>{-4} że domyślna, skonstruowana granica int to 0.

iota_view przykład konstruktora

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

Pobierz iterator do pierwszego elementu w widoku.

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

Parametry

Brak.

Wartość zwracana

Iterator wskazujący pierwszy element w widoku.

end

Pobierz końcowy element sentinel na końcu widoku.

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

Parametry

Brak.

Wartość zwracana

Jeśli obiekt iota_view jest niezwiązany, zwraca wartość std::unreachable_sentinel.

iota_view Jeśli element jest ograniczony, zwraca iterator wskazujący na sentinel obok ostatniej wartości w sekwencji.

size

Pobierz liczbę elementów w widoku. Element iota_view musi być ograniczony.

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

Parametry

Brak.

Wartość zwracana

Liczba elementów w elem.iota_view

Uwagi

Nie można wywołać size() wywołania dla niezwiązanego iota_viewelementu .

Zobacz też

<ranges>
iota() adapter zakresu
std::numerics::iota
klasy widoków