Namensräume
Varianten
Aktionen

std::ranges::crend

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
Definiert in der Header-Datei <ranges>
Definiert in Header <iterator>
inline namespace /* nicht spezifiziert */ {

    inline constexpr /* unspecified */ crend = /* unspecified */;

}
(seit C++20)
(Customization-Point-Objekt)
Aufruf-Signatur
template< class T >

    requires /* siehe unten */

constexpr /* siehe unten */ auto crend( 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 kennzeichnet, der als umgekehrte Sequenz behandelt wird.

range-rbegin-rend.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::crend ist ausdrucksäquivalent zu ranges::rend(static_cast<CT&&>(t)).

(bis C++23)

Wenn das Argument ein lvalue oder ranges::enable_borrowed_range<std::remove_cv_t<T>> ist true, dann ist ein Aufruf von ranges::crend ausdrucksäquivalent zu

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

(seit C++23)

Wenn ranges::crend(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::crend(e)) ist und I decltype(ranges::crbegin(e)) ist. Zusätzlich modelliert S constant-iterator, wenn es input_iterator modelliert.(seit C++23)

Customization Point Objects

Der Name ranges::crend bezeichnet ein Customization Point Object, ein konstantes Funktionsobjekt eines literalen semiregular Klassentyps. Zu Illustrationszwecken wird die cv-unqualifizierte Version seines Typs als __crend_fn bezeichnet.

Alle Instanzen von __crend_fn sind gleich. Die Auswirkungen des Aufrufs unterschiedlicher Instanzen vom Typ __crend_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). Daher kann ranges::crend frei kopiert 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::crend oben erfüllen, dann modelliert __crend_fn

Andernfalls nimmt kein Funktionsaufrufoperator von __crend_fn an der Überladungsauflösung teil.

[bearbeiten] Beispiel

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int main()
{
    int a[]{4, 6, -3, 9, 10};
    std::cout << "Array backwards: ";
    namespace ranges = std::ranges;
    ranges::copy(ranges::rbegin(a), ranges::rend(a),
                 std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    std::cout << "Vector backwards: ";
    std::vector v{4, 6, -3, 9, 10};
    ranges::copy(ranges::rbegin(v), ranges::rend(v),
                 std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}

Ausgabe

Array backwards: 10 9 -3 6 4
Vector backwards: 10 9 -3 6 4

[bearbeiten] Siehe auch

gibt einen Reverse-End-Iterator zu einem Range zurück
(Customization Point Objekt)[edit]
(C++14)
gibt einen Reverse-End-Iterator für einen Container oder ein Array zurück
(function template) [bearbeiten]