Namespaces
Variants

std::end, std::cend

Desde es.cppreference.net
 
 
Biblioteca de iteradores
Conceptos de iteradores
Primitivas de iteradores
Conceptos y utilidades de algoritmos
Conceptos invocables indirectos
Requisitos comunes de algoritmos
(C++20)
(C++20)
(C++20)
Utilidades
(C++20)
Adaptadores de iteradores
Acceso a rangos
(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>
 (desde C++23)
Definido en el encabezado <flat_set>
 (desde C++23)
Definido en el encabezado <forward_list>
Definido en el encabezado <inplace_vector>
 (desde C++26)
Definido en el encabezado <iterator>
Definido en el encabezado <list>
Definido en el encabezado <map>
Definido en el encabezado <optional>
 (desde C++26)
Definido en el encabezado <regex>
Definido en el encabezado <set>
Definido en el encabezado <span>
 (desde C++20)
Definido en el encabezado <stacktrace>
 (desde C++23)
Definido en el encabezado <string>
Definido en el encabezado <string_view>
 (desde C++17)
Definido en el encabezado <unordered_map>
Definido en el encabezado <unordered_set>
Definido en el encabezado <valarray>
Definido en el encabezado <vector>
template< class C >
auto end( C& c ) -> decltype(c.end());
(1) (desde C++11)
(constexpr desde C++17)
template< class C >
auto end( const C& c ) -> decltype(c.end());
(2) (desde C++11)
(constexpr desde C++17)
template< class T, std::size_t N >
T* end( T (&array)[N] );
(3) (desde C++11)
(noexcept desde C++14)
(constexpr desde C++14)
template< class C >
constexpr auto cend( const C& c ) noexcept(/* see below */)
    -> decltype(std::end(c));
(4) (desde C++14)

Devuelve un iterador al final (es decir, el elemento después del último elemento) del rango dado.

1,2) Devuelve c.end(), que normalmente es un iterador una posición después del final de la secuencia representada por c.
1) Si C es un Contenedor estándar, devuelve un objeto C::iterator.
2) Si C es un Contenedor estándar, devuelve un objeto C::const_iterator.
3) Devuelve un puntero al final de array.
4) Devuelve std::end(c), donde c siempre se trata como calificado como const.
Si C es un Contenedor estándar, devuelve un objeto C::const_iterator.

Parámetros

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

Valor de retorno

1,2) c. end ( )
3) array + N
4) c. end ( )

Excepciones

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

Sobrecargas

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

especializa std::end
(plantilla de función)
especializa std::end
(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 end en contexto genérico es equivalente a using std :: end ; end ( 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);
    for (; it != end_it; ++it)
        f(*it);
}

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

(desde C++20)

Notas

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

std::cend se introduce para la unificación de accesos a rangos de miembros y no miembros. Véase también LWG issue 2128 .

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

Ejemplo

#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
    std::vector<int> v = {3, 1, 4};
    if (std::find(std::begin(v), std::end(v), 5) != std::end(v))
        std::cout << "Found a 5 in vector v!\n";
    int w[] = {5, 10, 15};
    if (std::find(std::begin(w), std::end(w), 5) != std::end(w))
        std::cout << "Found a 5 in array w!\n";
}

Salida:

Found a 5 in array w!

Véase también

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