Namensräume
Varianten
Aktionen

std::end, std::cend

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
endcend
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Definiert in der Header-Datei <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 zum Ende (d.h. zum Element nach dem letzten Element) des gegebenen Bereichs zurück.

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

range-begin-end.svg

Inhalt

[edit] Parameter

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

[edit] Rückgabewert

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

[edit] Exceptions

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

[edit] Überladungen

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

spezialisiert std::end
(function template) [bearbeiten]
spezialisiert std::end
(function template) [edit]
Unterstützung für range-basierte for-Schleifen
(Funktion) [bearbeiten]
Unterstützung für range-basierte for-Schleifen
(Funktion) [bearbeiten]

Ähnlich der Verwendung von swap (beschrieben in Swappable) ist die typische Verwendung der end-Funktion in einem generischen Kontext äquivalent zu using std::end; end(arg);, was sowohl den mittels ADL ausgewählten Überladungen für benutzerdefinierte Typen als auch den Standardbibliotheks-Funktionstemplates ermöglicht, im selben Überladungsraum zu erscheinen.

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);
}

Überladungen von end, die durch argumentabhängige Suche gefunden werden, können verwendet werden, um das Verhalten von std::ranges::end, std::ranges::cend und anderen Anpassungszeigerobjekten, die von std::ranges::end abhängen, anzupassen.

(seit C++20)

[edit] Anmerkungen

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

std::cend wurde zur Vereinheitlichung von Member- und Nicht-Member-Bereichszugriffen eingeführt. Siehe auch LWG issue 2128.

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

[edit] 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!

[edit] Siehe auch

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