std::end, std::cend
| 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 */) |
(4) | (seit C++14) |
Gibt einen Iterator zum Ende (d.h. zum Element nach dem letzten Element) des gegebenen Bereichs zurück.
Inhalt |
[edit] Parameter
| c | - | ein Container oder eine Ansicht mit einer Memberfunktion end |
| array | - | Ein Array beliebigen Typs |
[edit] Rückgabewert
[edit] Exceptions
[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) | |
| (C++11) |
spezialisiert std::end (function template) |
| Unterstützung für range-basierte for-Schleifen (Funktion) | |
| Unterstützung für range-basierte for-Schleifen (Funktion) |
Ä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 |
(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) |
| (C++20) |
gibt ein Sentinel zurück, das das Ende eines Ranges anzeigt (Customization Point Objekt) |
| (C++20) |
gibt ein Sentinel zurück, das das Ende eines schreibgeschützten Ranges anzeigt (Customization Point Objekt) |