Namespaces
Variants

std:: data

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
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
data
(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 >
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 rango.

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

Contenidos

Parámetros

c - un contenedor o vista con una data ( ) función miembro
array - un array de tipo arbitrario
il - un std::initializer_list

Valor de retorno

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

Excepciones

1) Puede lanzar excepciones definidas por la implementación.

Notas

La sobrecarga para std::initializer_list es necesaria porque no tiene una función miembro data .

Macro de prueba de características Valor Estándar Característica
__cpp_lib_nonmember_container_access 201411L (C++17) std::size() , std::data() , y std::empty()

Implementación posible

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

Ejemplo

#include <cstring>
#include <iostream>
#include <string>
int main()
{
    std::string s{"Hello world!\n"};
    char a[20]; // almacenamiento para una cadena estilo C
    std::strcpy(a, std::data(s));
//  [s.data(), s.data() + s.size()] está garantizado que es un NTBS desde C++11
    std::cout << a;
}

Salida:

Hello world!

Véase también

obtiene un puntero al inicio de un rango contiguo
(objeto de punto de personalización)
obtiene un puntero al inicio de un rango contiguo de solo lectura
(objeto de punto de personalización)