Namespaces
Variants

std::data

De fr.cppreference.net
 
 
Bibliothèque d'itérateurs
Concepts d'itérateur
Primitives d'itérateur
Concepts et utilitaires d'algorithme
Concepts d'appel indirect
Exigences communes d'algorithme
(C++20)
(C++20)
(C++20)
Utilitaires
(C++20)
Adaptateurs d'itérateur
Accès aux plages
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(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>
 (depuis C++23)
Défini dans l'en-tête <flat_set>
 (depuis C++23)
Défini dans l'en-tête <forward_list>
Défini dans l'en-tête <inplace_vector>
 (depuis C++26)
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 <optional>
 (depuis C++26)
Défini dans l'en-tête <regex>
Défini dans l'en-tête <set>
Défini dans l'en-tête <span>
 (depuis C++20)
Défini dans l'en-tête <stacktrace>
 (depuis C++23)
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 <valarray>
Défini dans l'en-tête <vector>
template< class C >
constexpr auto data( C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(1) (depuis C++17)
template< class C >
constexpr auto data( const C& c ) noexcept(noexcept(c.data()))
    -> 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)

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

1,2) Renvoie c.data().
3) Renvoie array.

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!

Rapport de défaut

Les rapports de défaut suivants modifiant le comportement ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
P3016R6 C++17 1) non-membre std::data surcharge était fournie pour std::initializer_list
2) std::data n'était pas obligé de propager la spécification d'exception
1) supprimé
2) requis

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)