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

constexpr auto cbegin ( const C & c ) noexcept ( /* ver más abajo */ )

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

Devuelve un iterador al inicio del rango dado.

1,2) Devuelve c. begin ( ) , que típicamente es un iterador al inicio de la secuencia representada por c .
1) Si C es un Container estándar, devuelve un objeto C::iterator .
2) Si C es un Container estándar, devuelve un objeto C::const_iterator .
3) Devuelve un puntero al inicio del array .
4) Devuelve std :: begin ( c ) , tratando siempre a c como calificado como const.
Si C es un Container estándar, devuelve un objeto C::const_iterator .

range-begin-end.svg

Contenidos

Parámetros

c - un contenedor o vista con una función miembro begin
array - un array de tipo arbitrario

Valor de retorno

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

Excepciones

4)
noexcept especificación:
noexcept ( noexcept ( std :: begin ( c ) ) )

Sobrecargas

Sobrecargas personalizadas de begin pueden proporcionarse para clases y enumeraciones que no exponen una función miembro begin() adecuada, pero que pueden ser iteradas. Las siguientes sobrecargas ya están proporcionadas por la biblioteca estándar:

sobrecarga std::begin
(plantilla de función)
sobrecarga std::begin
(plantilla de función)
soporte para bucle for basado en rangos
(función)
soporte para bucle for basado en rangos
(función)

Similar al uso de swap (descrito en Swappable ), el uso típico de la función begin en contexto genérico es equivalente a using std :: begin ; begin ( arg ) ; , lo que permite que tanto las sobrecargas seleccionadas por ADL para tipos definidos por el usuario como las plantillas de función de la biblioteca estándar aparezcan en el mismo conjunto de sobrecargas.

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

Las sobrecargas de begin encontradas mediante búsqueda dependiente de argumento pueden utilizarse para personalizar el comportamiento de std::ranges::begin , std::ranges::cbegin , y otros objetos de personalización de punteros que dependen de std::ranges::begin .

(desde C++20)

Notas

Las sobrecargas que no son de arreglo reflejan exactamente el comportamiento de C::begin . Sus efectos pueden ser sorprendentes si la función miembro no tiene una implementación razonable.

std::cbegin se introduce para unificar los accesos a rangos de miembros y no miembros. Véase también LWG issue 2128 .

Si C es una vista de constante superficial, std::cbegin puede devolver un iterador mutable. Este comportamiento es inesperado para algunos usuarios. Véase también P2276 y P2278 .

Ejemplo

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

Salida:

+3
-5

Véase también

(C++11) (C++14)
devuelve un iterador al final de un contenedor o array
(plantilla de función)
devuelve un iterador al inicio de un rango
(objeto punto de personalización)
devuelve un iterador al inicio de un rango de solo lectura
(objeto punto de personalización)