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 const iterowalne |
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. |
begin C++20 |
Pobierz iterator do pierwszego elementu. |
end C++20 |
Pobierz element sentinel na końcu widoku. |
size C++20 |
Pobierz liczbę elementów. |
Dziedziczone z view_interface |
Opis |
back C++20 |
Pobierz ostatni element. |
empty C++20 |
Sprawdź, czy widok jest pusty. |
front C++20 |
Pobierz pierwszy element. |
operator[] C++20 |
Pobierz element na określonej pozycji. |
operator bool C++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 W
szablonu zainicjowanego.
2) Utwórz element iota_view
z określoną wartością początkową i wartością końcową określoną przez typ W
zainicjowany 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_view
elementu .
Zobacz też
<ranges>
iota()
adapter zakresu
std::numerics::iota
klasy widoków
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla