std::begin, std::cbegin
| 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 begin( C& c ) -> decltype(c.begin()); |
(1) | (seit C++11) (constexpr seit C++17) |
template< class C > auto begin( const C& c ) -> decltype(c.begin()); |
(2) | (seit C++11) (constexpr seit C++17) |
template< class T, std::size_t N > T* begin( T (&array)[N] ); |
(3) | (seit C++11) (noexcept seit C++14) (constexpr seit C++14) |
| template< class C > constexpr auto cbegin( const C& c ) noexcept(/* siehe unten */) |
(4) | (seit C++14) |
Gibt einen Iterator zum Anfang des gegebenen Bereichs zurück.
Inhalt |
[bearbeiten] Parameter
| c | - | Ein Container oder eine View mit einer begin-Memberfunktion |
| array | - | Ein Array beliebigen Typs |
[bearbeiten] Rückgabewert
[bearbeiten] Ausnahmen
[bearbeiten] Überladungen
Benutzerdefinierte Überladungen von begin können für Klassen und Aufzählungen bereitgestellt werden, die keine geeignete begin()-Memberfunktion bereitstellen, aber dennoch iterierbar sind. Die folgenden Überladungen werden bereits von der Standardbibliothek bereitgestellt
| Überladungen von std::begin (function template) | |
| (C++11) |
Überladungen von std::begin (function template) |
| Unterstützung für range-basierte for-Schleifen (Funktion) | |
| Unterstützung für range-basierte for-Schleifen (Funktion) |
Ähnlich wie bei der Verwendung von swap (beschrieben in Swappable) ist die typische Verwendung der begin-Funktion im generischen Kontext äquivalent zu using std::begin; begin(arg);, was sowohl die über ADL ausgewählten Überladungen für benutzerdefinierte Typen als auch die Standardbibliotheks-Funktionstemplates im selben Überladungssatz erscheinen lässt.
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); while (it != end_it) { f(*it); ++it; } }
|
Von der argumentabhängigen Suche gefundene Überladungen von |
(seit C++20) |
[bearbeiten] Anmerkungen
Die Nicht-Array-Überladungen spiegeln das Verhalten von C::begin exakt wider. Ihre Auswirkungen können überraschend sein, wenn die Memberfunktion keine sinnvolle Implementierung hat.
std::cbegin wurde zur Vereinheitlichung von Member- und Nicht-Member-Bereichszugriffen eingeführt. Siehe auch LWG issue 2128.
Wenn C eine Shallow-Const-View ist, kann std::cbegin einen mutierbaren Iterator zurückgeben. Ein solches Verhalten ist für einige Benutzer unerwartet. Siehe auch P2276 und P2278.
[bearbeiten] Beispiel
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v = {3, 1, 4}; auto vi = std::begin(v); std::cout << std::showpos << *vi << '\n'; int a[] = {-5, 10, 15}; auto ai = std::begin(a); std::cout << *ai << '\n'; }
Ausgabe
+3 -5
[bearbeiten] Siehe auch
| (C++11)(C++14) |
gibt einen Iterator zum Ende eines Containers oder Arrays zurück (Funktionsvorlage) |
| (C++20) |
gibt einen Iterator zum Anfang eines Ranges zurück (Customization Point Objekt) |
| (C++20) |
gibt einen Iterator zum Anfang eines schreibgeschützten Ranges zurück (Customization Point Objekt) |