Namespaces
Variants

std:: begin, std:: cbegin

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
begin cbegin
(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 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 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 an den Anfang des angegebenen Bereichs zurück.

1,2) Gibt c. begin ( ) zurück, was typischerweise ein Iterator zum Anfang 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 den Anfang des array zurück.
4) Gibt std :: begin ( 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 Ansicht mit einer begin Member-Funktion
array - ein Array beliebigen Typs

Rückgabewert

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

Exceptions

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

Überladungen

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

überlädt std::begin
(Funktions-Template)
überlädt std::begin
(Funktions-Template)
Range-basierte for-Schleife Unterstützung
(Funktion)
Range-basierte for-Schleife Unterstützung
(Funktion)

Ähnlich wie bei der Verwendung von swap (beschrieben in Swappable ) ist die typische Verwendung der begin -Funktion in einem generischen Kontext äquivalent zu using std :: begin ; begin ( arg ) ; , was sowohl ADL-ausgewählte Überladungen für benutzerdefinierte Typen als auch die Standardbibliothek-Funktionsvorlagen ermöglicht, im selben Überladungssatz 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);
    while (it != end_it)
    {
        f(*it);
        ++it;
    }
}
**Erklärung:** - Der gesamte C++ Code innerhalb der `
` und `` Tags wurde nicht übersetzt, wie angefordert
- HTML-Tags, Attribute und Formatierung wurden vollständig beibehalten
- C++-spezifische Begriffe (template, typename, void, auto, while, etc.) wurden nicht übersetzt
- Nur der umgebende Text (die Anweisungen) wurde ins Deutsche übersetzt

Durch argumentabhängige Namenssuche gefundene Überladungen von begin können verwendet werden, um das Verhalten von std::ranges::begin , std::ranges::cbegin und anderen Anpassungspunktobjekten anzupassen, die von std::ranges::begin abhängen.

(seit C++20)

Hinweise

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

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

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

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

Siehe auch

(C++11) (C++14)
gibt einen Iterator zum Ende eines Containers oder Arrays zurück
(Funktions-Template)
gibt einen Iterator zum Anfang eines Bereichs zurück
(Anpassungspunkt-Objekt)
gibt einen Iterator zum Anfang eines schreibgeschützten Bereichs zurück
(Anpassungspunkt-Objekt)