Namensräume
Varianten
Aktionen

std::begin, std::cbegin

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
begincbegin
(C++11)(C++14)
(C++14)(C++14)  
(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 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 */)

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

Gibt einen Iterator zum Anfang des gegebenen Bereichs zurück.

1,2) Gibt c.begin() zurück, was typischerweise ein Iterator zum Anfang der von c repräsentierten Sequenz ist.
1) Wenn C ein Standard-Container ist, wird ein C::iterator-Objekt zurückgegeben.
2) Wenn C ein Standard-Container ist, wird ein C::const_iterator-Objekt zurückgegeben.
3) Gibt einen Zeiger auf den Anfang von array zurück.
4) Gibt std::begin(c) zurück, wobei c immer als const-qualifiziert behandelt wird.
Wenn C ein Standard-Container ist, wird ein C::const_iterator-Objekt zurückgegeben.

range-begin-end.svg

Inhalt

[bearbeiten] Parameter

c - Ein Container oder eine View mit einer begin-Memberfunktion
array - Ein Array beliebigen Typs

[bearbeiten] Rückgabewert

1,2) c.begin()
3) array
4) c.begin()

[bearbeiten] Ausnahmen

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

[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) [bearbeiten]
Überladungen von std::begin
(function template) [edit]
Unterstützung für range-basierte for-Schleifen
(Funktion) [bearbeiten]
Unterstützung für range-basierte for-Schleifen
(Funktion) [bearbeiten]

Ä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 begin können verwendet werden, um das Verhalten von std::ranges::begin, std::ranges::cbegin und anderen Customization-Pointer-Objekten, die von std::ranges::begin abhängen, anzupassen.

(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) [bearbeiten]
gibt einen Iterator zum Anfang eines Ranges zurück
(Customization Point Objekt)[edit]
gibt einen Iterator zum Anfang eines schreibgeschützten Ranges zurück
(Customization Point Objekt)[edit]