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)
Défini dans l'en-tête <array>
Défini dans l'en-tête <deque>
Défini dans l'en-tête <flat_map>
Défini dans l'en-tête <flat_set>
Défini dans l'en-tête <forward_list>
Défini dans l'en-tête <inplace_vector>
Défini dans l'en-tête <iterator>
Défini dans l'en-tête <list>
Défini dans l'en-tête <map>
Défini dans l'en-tête <regex>
Défini dans l'en-tête <set>
Défini dans l'en-tête <span>
Défini dans l'en-tête <string>
Défini dans l'en-tête <string_view>
Défini dans l'en-tête <unordered_map>
Défini dans l'en-tête <unordered_set>
Défini dans l'en-tête <vector>
template < class C >
auto begin ( C & c ) - > decltype ( c. begin ( ) ) ;
(1) (depuis C++11)
(constexpr depuis C++17)
template < class C >
auto begin ( const C & c ) - > decltype ( c. begin ( ) ) ;
(2) (depuis C++11)
(constexpr depuis C++17)
template < class T, std:: size_t N >
T * begin ( T ( & array ) [ N ] ) ;
(3) (depuis C++11)
(noexcept depuis C++14)
(constexpr depuis C++14)
template < class C >

constexpr auto cbegin ( const C & c ) noexcept ( /* voir ci-dessous */ )

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

Retourne un itérateur vers le début de la plage donnée.

1,2) Retourne c. begin ( ) , qui est typiquement un itérateur vers le début de la séquence représentée par c .
1) Si C est un Container standard, retourne un objet C::iterator .
2) Si C est un Container standard, retourne un objet C::const_iterator .
3) Retourne un pointeur vers le début du array .
4) Retourne std :: begin ( c ) , avec c toujours traité comme qualifié const.
Si C est un Container standard, retourne un objet C::const_iterator .

range-begin-end.svg

Table des matières

Paramètres

c - un conteneur ou une vue avec une fonction membre begin
array - un tableau de type arbitraire

Valeur de retour

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

Exceptions

4)
noexcept spécification :
noexcept ( noexcept ( std :: begin ( c ) ) )

Surcharges

Des surcharges personnalisées de begin peuvent être fournies pour les classes et les énumérations qui n'exposent pas de fonction membre begin() appropriée, mais qui peuvent être parcourues. Les surcharges suivantes sont déjà fournies par la bibliothèque standard :

surcharge std::begin
(modèle de fonction)
surcharge std::begin
(modèle de fonction)
support de la boucle for basée sur des intervalles
(fonction)
support de la boucle for basée sur des intervalles
(fonction)

Similaire à l'utilisation de swap (décrite dans Swappable ), l'utilisation typique de la fonction begin dans un contexte générique équivaut à using std :: begin ; begin ( arg ) ; , ce qui permet à la fois aux surcharges sélectionnées par ADL pour les types définis par l'utilisateur et aux modèles de fonctions de la bibliothèque standard d'apparaître dans le même ensemble de surcharges.

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

Les surcharges de begin trouvées par la recherche dépendante des arguments peuvent être utilisées pour personnaliser le comportement de std::ranges::begin , std::ranges::cbegin , et d'autres objets de personnalisation dépendant de std::ranges::begin .

(depuis C++20)

Notes

Les surcharges non-tableau reflètent exactement le comportement de C::begin . Leurs effets peuvent être surprenants si la fonction membre n'a pas une implémentation raisonnable.

std::cbegin est introduit pour l'unification des accès aux plages membres et non membres. Voir aussi LWG issue 2128 .

Si C est une vue à constance superficielle, std::cbegin peut renvoyer un itérateur mutable. Ce comportement est inattendu pour certains utilisateurs. Voir également P2276 et P2278 .

Exemple

#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';
}

Sortie :

+3
-5

Voir aussi

(C++11) (C++14)
retourne un itérateur vers la fin d'un conteneur ou d'un tableau
(fonction template)
retourne un itérateur vers le début d'une plage
(customization point object)
retourne un itérateur vers le début d'une plage en lecture seule
(customization point object)