Espacios de nombres
Variantes
Acciones

std::data

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
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
data
(C++17)
 
Definido en el archivo de encabezado <array>
Definido en el archivo de encabezado <deque>
Definido en el archivo de encabezado <forward_list>
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>
(desde C++20)
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>
template <class C>
constexpr auto data(C& c) -> decltype(c.data());
(1) (desde C++17)
template <class C>
constexpr auto data(const C& c) -> decltype(c.data());
(2) (desde C++17)
template <class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept;
(3) (desde C++17)
template <class E>
constexpr const E* data(std::initializer_list<E> il) noexcept;
(4) (desde C++17)

Devuelve un puntero al bloque de memoria que contiene los elementos del contenedor.

1,2) devuelve c.data()
3) devuelve array
4) devuelve il.begin()

Contenido

[editar] Parámetros

c - Un contenedor con una función miembro data().
array - Un array de tipo arbitrario.
il - Una lista de inicializadores.

[editar] Return value

Un puntero al bloque de memoria que contiene los elementos del contenedor.

[editar] Posible implementación

Primera versión
template <class C> 
constexpr auto data(C& c) -> decltype(c.data())
{
    return c.data();
}
Segunda versión
template <class C> 
constexpr auto data(const C& c) -> decltype(c.data())
{
    return c.data();
}
Tercera versión
template <class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept
{
    return array;
}
Cuarta versión
template <class E> 
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

[editar] Ejemplo

#include <string>
#include <cstring>
#include <iostream>
 
int main()
{
    std::string s {"Hola mundo!\n"};
 
    char a[20]; // almacenamiento para una cadena estilo C
    std::strcpy(a, std::data(s));
    //[s.data(), s.data() + s.size()] se garantiza que sea una NTBS desde C++11
 
    std::cout << a;
}

Salida:

Hola mundo!

[editar] Véase también

Obtiene un puntero al principio de un rango contiguo
(objeto punto de personalización) [editar]
Obtiene un puntero al inicio de un rango contiguo de solo lectura
(objeto punto de personalización) [editar]