std::ranges::views::repeat, std::ranges::repeat_view
| Definiert in der Header-Datei <ranges> |
||
| template< std::move_constructible W, std::semiregular Bound = std::unreachable_sentinel_t > |
(1) | (seit C++23) |
| namespace views { inline constexpr /* unspecified */ repeat = /* unspecified */; |
(2) | (seit C++23) |
| Aufruf-Signatur |
||
| template< class W > requires /* siehe unten */ |
(seit C++23) | |
| template< class W, class Bound > requires /* siehe unten */ |
(seit C++23) | |
| Hilfskonzepte |
||
concept /*integer-like-with-usable-difference-type*/ = /*is-signed-integer-like*/<T> || |
(3) | (nur Exposition*) |
repeat_view modelliert random_access_range. Wenn Bound nicht std::unreachable_sentinel_t ist, modelliert repeat_view auch sized_range und common_range.
Inhalt |
Customization Point Objects
Der Name views::repeat bezeichnet ein Customization Point Object, ein konstantes Funktionsobjekt vom Literal semiregular-Klassentyp. Zu Aus exposiçãostechnischen Zwecken wird die cv-unqualifizierte Version seines Typs als __repeat_fn bezeichnet.
Alle Instanzen von __repeat_fn sind gleich. Die Auswirkungen des Aufrufs verschiedener Instanzen vom Typ __repeat_fn mit denselben Argumenten sind äquivalent, unabhängig davon, ob der Ausdruck, der die Instanz bezeichnet, ein lvalue oder rvalue ist, und ob er const-qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Daher kann views::repeat frei kopiert und seine Kopien können austauschbar verwendet werden.
Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die Anforderungen an Argumente von views::repeat oben erfüllen, modelliert __repeat_fn
- std::invocable<__repeat_fn, Args...>,
- std::invocable<const __repeat_fn, Args...>,
- std::invocable<__repeat_fn&, Args...>
- std::invocable<const __repeat_fn&, Args...>.
Andernfalls nimmt kein Funktionsaufrufoperator von __repeat_fn an der Überladungsauflösung teil.
[edit] Datenmitglieder
| Mitglied | Definition |
movable-box <W> value_ |
das sich wiederholende Element der Ansicht ((exposition-only member object*) |
Bound bound_ |
der Sentinel-Wert ((exposition-only member object*) |
[edit] Memberfunktionen
erzeugt eine repeat_view(öffentliche Memberfunktion) | |
erhält den Anfangs-Iterator einer repeat_view(öffentliche Memberfunktion) | |
erhält den Sentinel, der das Ende einer repeat_view bezeichnet(öffentliche Memberfunktion) | |
erhält die Größe einer repeat_view, wenn diese sized ist(öffentliche Memberfunktion) | |
Geerbt von std::ranges::view_interface | |
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur, wenn sie sized_range oder forward_range erfüllt(public member function of std::ranges::view_interface<D>) | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist (public member function of std::ranges::view_interface<D>) | |
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das n-te Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie random_access_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
std::ranges::repeat_view::repeat_view
| repeat_view() requires std::default_initializable<W> = default; |
(1) | (seit C++23) |
| constexpr explicit repeat_view( const W& value, Bound bound = Bound() ); |
(2) | (seit C++23) |
| constexpr explicit repeat_view( W&& value, Bound bound = Bound() ); |
(3) | (seit C++23) |
| template < class... WArgs, class... BoundArgs > requires std::constructible_from<W, WArgs...> |
(4) | (seit C++23) |
Bound nicht std::unreachable_sentinel_t ist und bool(bound >= 0) false ist, ist das Verhalten undefiniert.Bound nicht std::unreachable_sentinel_t ist und bool(bound >= 0) false ist, ist das Verhalten undefiniert.value_ mit std::make_from_tuple<T>(std::move(value_args)) und bound_ mit std::make_from_tuple<Bound>(std::move(bound_args)).Bound nicht std::unreachable_sentinel_t ist und bool(bound >= 0) false ist, ist das Verhalten undefiniert.Parameter
| value | - | der wiederholt auszugebende Wert |
| bound | - | die Grenze |
| value_args | - | das Tupel, das die Initialisierer von value_ enthält |
| bound_args | - | das Tupel, das die Initialisierer von bound_ enthält |
std::ranges::repeat_view::begin
| constexpr /*iterator*/ begin() const; |
(seit C++23) | |
Gibt iterator (std::addressof(*value_ )) zurück.
std::ranges::repeat_view::end
| constexpr /*iterator*/ end() const requires (!std::same_as<Bound, std::unreachable_sentinel_t>); |
(1) | (seit C++23) |
| constexpr std::unreachable_sentinel_t end() const; |
(2) | (seit C++23) |
iterator (std::addressof(*value_ ), bound_ ) zurück.
std::ranges::repeat_view::size
| constexpr auto size() const requires (!std::same_as<Bound, std::unreachable_sentinel_t>); |
(seit C++23) | |
Gibt to-unsigned-like (bound_ ) zurück.
[edit] Deduktionsführer
| template< class W, class Bound = std::unreachable_sentinel_t > repeat_view( W, Bound = Bound() ) -> repeat_view<W, Bound>; |
(seit C++23) | |
[edit] Verschachtelte Klassen
| der Iterator-Typ ((nur zur Veranschaulichung)*) |
[edit] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_repeat |
202207L |
(C++23) | std::ranges::repeat_view
|
[edit] Beispiel
#include <iostream> #include <ranges> #include <string_view> using namespace std::literals; int main() { // bounded overload for (auto s : std::views::repeat("C++"sv, 3)) std::cout << s << ' '; std::cout << '\n'; // unbounded overload for (auto s : std::views::repeat("I know that you know that"sv) | std::views::take(3)) std::cout << s << ' '; std::cout << "...\n"; }
Ausgabe
C++ C++ C++ I know that you know that I know that you know that I know that you know that ...
[edit] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 4053 | C++20 | unäre Aufrufe von views::repeat haben das Argument nicht dekodiert |
das Argument dekodieren |
| LWG 4054 | C++20 | Aufruf von views::repeat mit einer repeat_viewerzeugte keine verschachtelte repeat_view |
erzeugt eine verschachtelterepeat_view
|
[edit] Siehe auch
| (C++20) |
ein view, der eine Sequenz aus aufeinanderfolgenden Inkrementierungen eines Anfangswerts besteht(Klassen-Template) (Customization Point Objekt) |