Namensräume
Varianten
Aktionen

std::ranges::cend

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
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 */

constexpr /* siehe unten */ auto cend( T&& t );
(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.

range-begin-end.svg

Sei CT

  • const std::remove_reference_t<T>& wenn das Argument ein lvalue ist (d.h. T ist ein lvalue-Referenztyp),
  • const T andernfalls.

Ein Aufruf von ranges::cend ist ausdrucksäquivalent zu ranges::end(static_cast<CT&&>(t)).

(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 ranges::cend ausdrucksäquivalent zu

In allen anderen Fällen ist ein Aufruf von ranges::cend ill-formed, was zu Substitution Failure führen kann, wenn der Aufruf im unmittelbaren Kontext einer Template-Instanziierung erscheint.

(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

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

gibt ein Sentinel zurück, das das Ende eines Ranges anzeigt
(Customization Point Objekt)[edit]
(C++11)(C++14)
gibt einen Iterator zum Ende eines Containers oder Arrays zurück
(Funktionsvorlage) [bearbeiten]