std::ranges::crbegin
| Definiert in der Header-Datei <ranges> |
||
| Definiert in Header <iterator> |
||
| inline namespace /* nicht spezifiziert */ { inline constexpr /* nicht spezifiziert */ crbegin = /* nicht spezifiziert */; |
(seit C++20) (Customization-Point-Objekt) |
|
| Aufruf-Signatur |
||
| template< class T > requires /* siehe unten */ |
(seit C++20) | |
|
Gibt einen Iterator auf das erste Element des als konstante Folge behandelten Arguments zurück. |
(bis C++23) |
|
Gibt einen konstanten Iterator auf das erste Element des als umgekehrte Folge behandelten Arguments zurück. |
(seit C++23) |
|
Sei
Ein Aufruf von |
(bis C++23) |
|
Wenn das Argument ein lvalue ist oder ranges::enable_borrowed_range<std::remove_cv_t<T>> true ist, dann ist ein Aufruf von
In allen anderen Fällen ist ein Aufruf von |
(seit C++23) |
Der Rückgabetyp modelliert in allen Fällen std::input_or_output_iterator und constant-iterator(seit C++23).
Customization Point Objects
Der Name ranges::crbegin bezeichnet ein Customization Point Object, welches ein konstantes Funktionsobjekt eines literalen semiregular-Klassentyps ist. Zu Expositionszwecken wird die cv-unqualifizierte Version seines Typs als __crbegin_fn bezeichnet.
Alle Instanzen von __crbegin_fn sind gleich. Die Effekte des Aufrufs verschiedener Instanzen vom Typ __crbegin_fn auf dieselben Argumente sind äquivalent, unabhängig davon, ob der Ausdruck, der die Instanz bezeichnet, ein lvalue oder rvalue ist und ob er mit const qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Daher kann ranges::crbegin frei kopiert werden und seine Kopien können austauschbar verwendet werden.
Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die Anforderungen für Argumente an ranges::crbegin erfüllt, dann modelliert __crbegin_fn
- std::invocable<__crbegin_fn, Args...>,
- std::invocable<const __crbegin_fn, Args...>,
- std::invocable<__crbegin_fn&, Args...>, und
- std::invocable<const __crbegin_fn&, Args...>.
Andernfalls nimmt kein Operator zum Aufrufen von __crbegin_fn an der Overload Resolution teil.
[edit] Beispiel
#include <cassert> #include <iterator> #include <span> #include <vector> int main() { std::vector<int> v{3, 1, 4}; auto vi = std::ranges::crbegin(v); assert(*vi == 4); ++vi; // OK, iterator object is mutable assert(*vi == 1); // *vi = 13; // Error: underlying element is read-only int a[]{-5, 10, 15}; auto ai = std::ranges::crbegin(a); assert(*ai == 15); // auto x_x = std::ranges::crbegin(std::vector<int>{6, 6, 6}); // ill-formed: the argument is an rvalue (see Notes ↑) auto si = std::ranges::crbegin(std::span{a}); // OK assert(*si == 15); static_assert ( std::ranges::enable_borrowed_range<std::remove_cv_t<decltype(std::span{a})>> ); }
[edit] Siehe auch
| (C++20) |
gibt einen Reverse-Iterator zu einem Range zurück (Customization Point Objekt) |
| (C++14) |
gibt einen Reverse-Iterator zum Anfang eines Containers oder Arrays zurück (function template) |