Namensräume
Varianten
Aktionen

std::data

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(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)
 
Definiert in der Header-Datei <array>
Definiert in Header <deque>
Definiert in Header <flat_map>
Definiert in Header <flat_set>
Definiert in Header <forward_list>
Definiert in Header <inplace_vector>
Definiert in Header <iterator>
Definiert in Header <list>
Definiert in Header <map>
Definiert in Header <regex>
Definiert in Header <set>
Definiert in Header <span>
Definiert in Header <string>
Definiert in Header <string_view>
Definiert in Header <unordered_map>
Definiert in Header <unordered_set>
Definiert in Header <vector>
template< class C >
constexpr auto data( C& c ) -> decltype(c.data());
(1) (seit C++17)
template< class C >
constexpr auto data( const C& c ) -> decltype(c.data());
(2) (seit C++17)
template< class T, std::size_t N >
constexpr T* data( T (&array)[N] ) noexcept;
(3) (seit C++17)
template< class E >
constexpr const E* data( std::initializer_list<E> il ) noexcept;
(4) (seit C++17)

Gibt einen Zeiger auf den Speicherblock zurück, der die Elemente des Bereichs enthält.

1,2) Gibt c.data() zurück.
3) Gibt array zurück.
4) Gibt il.begin() zurück.

Inhalt

[bearbeiten] Parameter

c - ein Container oder eine Ansicht mit einer Memberfunktion data()
array - Ein Array beliebigen Typs
il - eine std::initializer_list

[bearbeiten] Rückgabewert

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

[bearbeiten] Ausnahmen

1) Kann implementierungsabhängige Ausnahmen auslösen.

[bearbeiten] Anmerkungen

Die Überladung für std::initializer_list ist notwendig, da sie keine Memberfunktion data hat.

Feature-Test-Makro Wert Std Feature
__cpp_lib_nonmember_container_access 201411L (C++17) std::size(), std::data() und std::empty()

[bearbeiten] Mögliche Implementierung

Erste Version
template<class C>
constexpr auto data(C& c) -> decltype(c.data())
{
    return c.data();
}
Zweite Version
template<class C>
constexpr auto data(const C& c) -> decltype(c.data())
{
    return c.data();
}
Dritte Version
template<class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept
{
    return array;
}
Vierte Version
template<class E>
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

[bearbeiten] Beispiel

#include <cstring>
#include <iostream>
#include <string>
 
int main()
{
    std::string s{"Hello world!\n"};
 
    char a[20]; // storage for a C-style string
    std::strcpy(a, std::data(s));
//  [s.data(), s.data() + s.size()] is guaranteed to be an NTBS since C++11
 
    std::cout << a;
}

Ausgabe

Hello world!

[bearbeiten] Siehe auch

ruft einen Zeiger auf den Anfang eines zusammenhängenden Ranges ab
(Customization Point Objekt)[edit]
ruft einen Zeiger auf den Anfang eines schreibgeschützten zusammenhängenden Ranges ab
(Customization Point Objekt)[edit]