Espacios de nombres
Variantes
Acciones

std::begin, std::cbegin

De cppreference.com
< cpp‎ | iterator
 
 
Biblioteca de iteradores
Conceptos de iteradores
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
(C++11)
Acceso a rangos
begincbegin
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
Definido en el archivo de encabezado <array>
Definido en el archivo de encabezado <deque>
Definido en el archivo de encabezado <flat_map>
Definido en el archivo de encabezado <flat_set>
Definido en el archivo de encabezado <forward_list>
Definido en el archivo de encabezado <inplace_vector>
Definido en el archivo de encabezado <iterator>
Definido en el archivo de encabezado <list>
Definido en el archivo de encabezado <map>
Definido en el archivo de encabezado <regex>
Definido en el archivo de encabezado <set>
Definido en el archivo de encabezado <span>
Definido en el archivo de encabezado <string>
Definido en el archivo de encabezado <string_view>
Definido en el archivo de encabezado <unordered_map>
Definido en el archivo de encabezado <unordered_set>
Definido en el archivo de encabezado <vector>
(1)
template< class C >
auto begin( C& c ) -> decltype(c.begin());
(desde C++11)
(hasta C++17)
template< class C >
constexpr auto begin( C& c ) -> decltype(c.begin());
(desde C++17)
(2)
template< class C >
auto begin( const C& c ) -> decltype(c.begin());
(desde C++11)
(hasta C++17)
template< class C >
constexpr auto begin( const C& c ) -> decltype(c.begin());
(desde C++17)
(3)
template< class T, std::size_t N >
T* begin( T (&array)[N] );
(desde C++11)
(hasta C++14)
template< class T, std::size_t N >
constexpr T* begin( T (&array)[N] ) noexcept;
(desde C++14)
template< class C >

constexpr auto cbegin( const C& c ) noexcept(/* véase abajo */)

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

Devuelve un iterador al comienzo del rango dado.

1,2) Devuelve c.begin(), que normalmente es un iterador al comienzo 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 comienzo de array.
4) Devuelve std::begin(c), con c siempre tratado como calificado const.
Si C es un Container estándar, devuelve un objeto C::const_iterator.

range-begin-end.svg

Contenido

[editar] Parámetros

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

[editar] Valor de retorno

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

[editar] Excepciones

4)
Especificación noexcept:   (desde C++11)
noexcept(noexcept(std::begin(c)))

[editar] Sobrecargas

Se pueden proporcionar sobrecargas personalizadas de begin para clases y enumeraciones que no exponen una función miembro begin() adecuada, pero que se pueden iterar. La biblioteca estándar ya proporciona las siguientes sobrecargas:

Especialización de std::begin.
(plantilla de función) [editar]
Especialización de std::begin.
(plantilla de función) [editar]
Apoyo para bucle for basado en rango.
(función) [editar]
Apoyo para bucle for basado en rango.
(función) [editar]

De manera similar al uso de swap (descrito en Swappable), el uso típico de la función begin en un contexto genérico es un equivalente de using std::begin; begin(arg);, que permite que tanto las sobrecargas seleccionadas por la búsqueda dependiente de argumentos 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 por la búsqueda dependiente de argumentos se pueden usar para personalizar el comportamiento de std::ranges::begin, std::ranges::cbegin y otros objetos puntero de personalización según std::ranges::begin.

(desde C++20)

[editar] Notas

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

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

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

[editar] 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

[editar] Véase también

(C++11)(C++14)
Devuelve un iterator al final de un contenedor o array
(plantilla de función) [editar]
Devuelve un iterador al principio de un rango.
(objeto punto de personalización) [editar]
Devuelve un iterador al inicio de un rango de solo lectura.
(objeto punto de personalización) [editar]