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)
Défini dans l'en-tête <array>
Défini dans l'en-tête <deque>
Défini dans l'en-tête <flat_map>
Défini dans l'en-tête <flat_set>
Défini dans l'en-tête <forward_list>
Défini dans l'en-tête <inplace_vector>
Défini dans l'en-tête <iterator>
Défini dans l'en-tête <list>
Défini dans l'en-tête <map>
Défini dans l'en-tête <regex>
Défini dans l'en-tête <set>
Défini dans l'en-tête <span>
Défini dans l'en-tête <string>
Défini dans l'en-tête <string_view>
Défini dans l'en-tête <unordered_map>
Défini dans l'en-tête <unordered_set>
Défini dans l'en-tête <vector>
template < class C >
constexpr auto data ( C & c ) - > decltype ( c. data ( ) ) ;
(1) (depuis C++17)
template < class C >
constexpr auto data ( const C & c ) - > decltype ( c. data ( ) ) ;
(2) (depuis C++17)
template < class T, std:: size_t N >
constexpr T * data ( T ( & array ) [ N ] ) noexcept ;
(3) (depuis C++17)
template < class E >
constexpr const E * data ( std:: initializer_list < E > il ) noexcept ;
(4) (depuis C++17)

Retourne un pointeur vers le bloc de mémoire contenant les éléments de la plage.

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

Table des matières

Paramètres

c - un conteneur ou une vue avec une data ( ) fonction membre
array - un tableau de type arbitraire
il - un std::initializer_list

Valeur de retour

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

Exceptions

1) Peut lever des exceptions définies par l'implémentation.

Notes

La surcharge pour std::initializer_list est nécessaire car elle ne possède pas de fonction membre data .

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_nonmember_container_access 201411L (C++17) std::size() , std::data() , et std::empty()

Implémentation possible

Première version
template<class C>
constexpr auto data(C& c) -> decltype(c.data())
{
    return c.data();
}
Deuxième version
template<class C>
constexpr auto data(const C& c) -> decltype(c.data())
{
    return c.data();
}
Troisième version
template<class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept
{
    return array;
}
Quatrième version
template<class E>
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

Exemple

#include <cstring>
#include <iostream>
#include <string>
int main()
{
    std::string s{"Hello world!\n"};
    char a[20]; // stockage pour une chaîne de style C
    std::strcpy(a, std::data(s));
//  [s.data(), s.data() + s.size()] est garanti d'être un NTBS depuis C++11
    std::cout << a;
}

Sortie :

Hello world!

Voir aussi

obtient un pointeur vers le début d'une plage contiguë
(objet de point de personnalisation)
obtient un pointeur vers le début d'une plage contiguë en lecture seule
(objet de point de personnalisation)