std::ranges::cend
| Definiert in der Header-Datei <ranges> |
||
| Definiert in Header <iterator> |
||
| inline namespace /* nicht spezifiziert */ { inline constexpr /* nicht spezifiziert */ cend = /* nicht spezifiziert */; |
(seit C++20) (Customization-Point-Objekt) |
|
| Aufruf-Signatur |
||
| template< class T > requires /* siehe unten */ |
(seit C++20) | |
Gibt ein Sentinel für den konstanten Iterator zurück für den konstanten Iterator(seit C++23), der das Ende eines const-qualifizierten(bis C++23) Bereichs anzeigt.
|
Sei
Ein Aufruf von |
(bis C++23) |
|
Wenn das Argument ein lvalue 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) |
Wenn ranges::cend(e) für einen Ausdruck e gültig ist, wobei decltype((e)) T ist, dann modelliert CT modelliert std::ranges::range, und(bis C++23) std::sentinel_for<S, I> in allen Fällen true, wobei S decltype(ranges::cend(e)) und I decltype(ranges::cbegin(e)) ist. Zusätzlich modelliert S constant-iterator, wenn es input_iterator modelliert.(seit C++23)
Customization Point Objects
Der Name ranges::cend bezeichnet ein Customization Point Object, ein konstantes Funktionsobjekt vom Literal-Typ semiregular. Zu Auslegungszwecken wird die cv-unqualifizierte Version seines Typs als __cend_fn bezeichnet.
Alle Instanzen von __cend_fn sind gleich. Die Effekte des Aufrufs verschiedener Instanzen vom Typ __cend_fn auf dieselben Argumente 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). Somit kann ranges::cend frei kopiert werden und seine Kopien können austauschbar verwendet werden.
Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die oben genannten Anforderungen für Argumente an ranges::cend erfüllt, dann modelliert __cend_fn
- std::invocable<__cend_fn, Args...>,
- std::invocable<const __cend_fn, Args...>,
- std::invocable<__cend_fn&, Args...> und
- std::invocable<const __cend_fn&, Args...>.
Andernfalls nimmt kein Funktionsaufrufoperator von __cend_fn an der Überladungsauflösung teil.
[edit] Beispiel
#include <algorithm> #include <cassert> #include <ranges> #include <vector> int main() { std::vector vec{3, 1, 4}; int arr[]{5, 10, 15}; assert(std::ranges::find(vec, 5) == std::ranges::cend(vec)); assert(std::ranges::find(arr, 5) != std::ranges::cend(arr)); }
[edit] Siehe auch
| (C++20) |
gibt ein Sentinel zurück, das das Ende eines Ranges anzeigt (Customization Point Objekt) |
| (C++11)(C++14) |
gibt einen Iterator zum Ende eines Containers oder Arrays zurück (Funktionsvorlage) |