Namespaces
Variants

std:: end, std:: cend

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
end cend
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definiert in Header <array>
Definiert in Header <deque>
Definiert in Header <flat_map>
Definiert in Header <flat_set>
Definiert in Header <forward_list>
Definiert in Header <inplace_vector>
Definiert in Header <iterator>
Definiert in Header <list>
Definiert in Header <map>
Definiert in Header <regex>
Definiert in Header <set>
Definiert in Header <span>
Definiert in Header <string>
Definiert in Header <string_view>
Definiert in Header <unordered_map>
Definiert in Header <unordered_set>
Definiert in Header <vector>
template < class C >
auto end ( C & c ) - > decltype ( c. end ( ) ) ;
(1) (seit C++11)
(constexpr seit C++17)
template < class C >
auto end ( const C & c ) - > decltype ( c. end ( ) ) ;
(2) (seit C++11)
(constexpr seit C++17)
template < class T, std:: size_t N >
T * end ( T ( & array ) [ N ] ) ;
(3) (seit C++11)
(noexcept seit C++14)
(constexpr seit C++14)
template < class C >

constexpr auto cend ( const C & c ) noexcept ( /* siehe unten */ )

- > decltype ( std :: end ( c ) ) ;
(4) (seit C++14)

Gibt einen Iterator auf das Ende (d.h. das Element nach dem letzten Element) des gegebenen Bereichs zurück.

1,2) Gibt c. end ( ) zurück, was typischerweise ein Iterator hinter dem Ende der durch c repräsentierten Sequenz ist.
1) Wenn C ein standardmäßiger Container ist, gibt ein C::iterator -Objekt zurück.
2) Wenn C ein standardmäßiger Container ist, gibt ein C::const_iterator -Objekt zurück.
3) Gibt einen Zeiger auf das Ende des array zurück.
4) Gibt std :: end ( c ) zurück, wobei c stets als const-qualifiziert behandelt wird.
Wenn C ein standardmäßiger Container ist, gibt ein C::const_iterator -Objekt zurück.

range-begin-end.svg

Inhaltsverzeichnis

Parameter

c - ein Container oder eine View mit einer end Memberfunktion
array - ein Array beliebigen Typs

Rückgabewert

1,2) c. end ( )
3) array + N
4) c. end ( )

Exceptions

4)
noexcept Spezifikation:
noexcept ( noexcept ( std :: end ( c ) ) )

Überladungen

Benutzerdefinierte Überladungen von end können für Klassen und Aufzählungen bereitgestellt werden, die keine geeignete end() Memberfunktion bereitstellen, aber dennoch iteriert werden können. Die folgenden Überladungen werden bereits von der Standardbibliothek bereitgestellt:

spezialisiert std::end
(Funktions-Template)
spezialisiert std::end
(Funktions-Template)
Range-basierte for-Schleife Unterstützung
(Funktion)
Range-basierte for-Schleife Unterstützung
(Funktion)

Ähnlich wie die Verwendung von swap (beschrieben in Swappable ) ist die typische Verwendung der end -Funktion in generischem Kontext äquivalent zu using std :: end ; end ( arg ) ; , wodurch sowohl die ADL -selektierten Überladungen für benutzerdefinierte Typen als auch die Standardbibliothek-Funktionstemplates im selben Überladungssatz erscheinen können.

template<typename Container, typename Function>
void for_each(Container&& cont, Function f)
{
    using std::begin;
    auto it = begin(cont);
    using std::end;
    auto end_it = end(cont);
    for (; it != end_it; ++it)
        f(*it);
}

Durch argument-dependent lookup gefundene Überladungen von end können verwendet werden, um das Verhalten von std::ranges::end , std::ranges::cend und anderen Customization Pointer Objects anzupassen, die von std::ranges::end abhängen.

(since C++20)

Hinweise

Die Nicht-Array-Überladungen spiegeln exakt das Verhalten von C :: end ( ) wider. Ihre Effekte können überraschend sein, wenn die Member-Funktion keine sinnvolle Implementierung besitzt.

std::cend wurde zur Vereinheitlichung von Member- und Non-Member-Zugriffen auf Bereiche eingeführt. Siehe auch LWG issue 2128 .

Wenn C eine shallow-const-Ansicht ist, std::cend kann einen mutable Iterator zurückgeben. Solches Verhalten ist für einige Benutzer unerwartet. Siehe auch P2276 und P2278 .

Beispiel

#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
    std::vector<int> v = {3, 1, 4};
    if (std::find(std::begin(v), std::end(v), 5) != std::end(v))
        std::cout << "Found a 5 in vector v!\n";
    int w[] = {5, 10, 15};
    if (std::find(std::begin(w), std::end(w), 5) != std::end(w))
        std::cout << "Found a 5 in array w!\n";
}

Ausgabe:

Found a 5 in array w!

Siehe auch

(C++11) (C++14)
gibt einen Iterator zum Anfang eines Containers oder Arrays zurück
(Funktionstemplate)
gibt einen Sentinel zurück, der das Ende eines Bereichs anzeigt
(Anpassungspunktobjekt)
gibt einen Sentinel zurück, der das Ende eines schreibgeschützten Bereichs anzeigt
(Anpassungspunktobjekt)