Namensräume
Varianten
Aktionen

std::array

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in der Header-Datei <array>
template<

    class T,
    std::size_t N

> struct array;
(seit C++11)

std::array ist ein Container, der Arrays fester Größe kapselt.

Dieser Container ist ein Aggregattyp mit denselben Semantiken wie eine Struktur, die ein C-Style-Array T[N] als einziges nicht-statisches Datenelement enthält. Im Gegensatz zu einem C-Style-Array verfällt es nicht automatisch zu T*. Als Aggregattyp kann es mit Aggregatinitialisierung initialisiert werden, wobei höchstens N Initialisierer angegeben werden, die zu T konvertierbar sind: std::array<int, 3> a = {1, 2, 3};.

Die Struktur kombiniert die Leistung und Zugänglichkeit eines C-Style-Arrays mit den Vorteilen eines Standardcontainers, wie z. B. der Kenntnis seiner eigenen Größe, der Unterstützung von Zuweisungen, von zufälligen Zugriffsiteratoren usw.

std::array erfüllt die Anforderungen an Container und ReversibleContainer, mit der Ausnahme, dass ein standardmäßig konstruiertes Array nicht leer ist und die Komplexität des Austauschs linear ist, erfüllt die Anforderungen an ContiguousContainer,(seit C++17) und erfüllt teilweise die Anforderungen an SequenceContainer.

Es gibt einen Sonderfall für ein Array der Länge Null (N == 0). In diesem Fall ist array.begin() == array.end(), was ein eindeutiger Wert ist. Der Effekt des Aufrufs von front() oder back() für ein Array der Größe Null ist undefiniert.

Ein Array kann auch als Tupel von N Elementen desselben Typs verwendet werden.

Inhalt

[bearbeiten] Iterator-Invalidierung

Als Regel werden Iteratoren zu einem Array während der gesamten Lebensdauer des Arrays niemals ungültig. Man sollte jedoch beachten, dass während swap der Iterator weiterhin auf dasselbe Array-Element zeigt und somit seinen Wert ändert.

[bearbeiten] Template-Parameter

T - Elementtyp Muss MoveConstructible und MoveAssignable sein.
N - die Anzahl der Elemente im Array oder 0.

[bearbeiten] Member-Typen

Mitgliedertyp Definition
value_type T[edit]
size_type std::size_t[bearbeiten]
difference_type std::ptrdiff_t[bearbeiten]
Referenz value_type&[edit]
const_reference const value_type&[edit]
Zeiger value_type*[bearbeiten]
const_pointer const value_type*[bearbeiten]
iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu value_type

(bis C++17)

LegacyRandomAccessIterator und LegacyContiguousIterator, der ein LiteralType für value_type ist

(seit C++17)
(bis C++20)

LegacyRandomAccessIterator, contiguous_iterator, und ConstexprIterator zu value_type

(seit C++20)
[Bearbeiten]
const_iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu const value_type

(bis C++17)

LegacyRandomAccessIterator und LegacyContiguousIterator, der ein LiteralType für const value_type ist

(seit C++17)
(bis C++20)

LegacyRandomAccessIterator, contiguous_iterator, und ConstexprIterator zu const value_type

(seit C++20)
[Bearbeiten]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]

[bearbeiten] Member-Funktionen

Implizit definierte Member-Funktionen
(Konstruktor)
(implizit deklariert)
initialisiert das Array gemäß den Regeln der Aggregatinitialisierung (beachten Sie, dass die Standardinitialisierung für Nicht-Klassen-T zu undefinierten Werten führen kann)
(öffentliche Memberfunktion)
(Destruktor)
(implizit deklariert)
zerstört jedes Element des Arrays
(öffentliche Memberfunktion)
operator=
(implizit deklariert)
überschreibt jedes Element des Arrays mit dem entsprechenden Element eines anderen Arrays
(öffentliche Memberfunktion)
Elementzugriff
Greift mit Überprüfung auf ein bestimmtes Element zu
(public member function) [edit]
Greift auf ein bestimmtes Element zu
(public member function) [edit]
Greift auf das erste Element zu
(public member function) [edit]
Greift auf das letzte Element zu
(public member function) [edit]
Direkter Zugriff auf den zugrundeliegenden zusammenhängenden Speicher
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der Container leer ist
(public member function) [edit]
Gibt die Anzahl der Elemente zurück
(public member function) [edit]
Gibt die maximal mögliche Anzahl von Elementen zurück
(public member function) [edit]
Operationen
füllt den Container mit einem angegebenen Wert
(öffentliche Member-Funktion) [bearbeiten]
tauscht die Inhalte
(public member function) [edit]

[bearbeiten] Nicht-Member-Funktionen

(C++11)(C++11)(entfernt in C++20)(C++11)(entfernt in C++20)(C++11)(entfernt in C++20)(C++11)(entfernt in C++20)(C++11)(entfernt in C++20)(C++20)
vergleicht die Werte zweier arrays lexikographisch
(function template) [edit]
greift auf ein Element eines arrays zu
(Funktionstemplate) [bearbeiten]
spezialisiert den Algorithmus std::swap
(function template) [edit]
(C++20)
erstellt ein std::array-Objekt aus einem eingebauten Array
(Funktionsschablone) [edit]

[bearbeiten] Hilfsklassen

ermittelt die Größe eines arrays
(Klassentemplatenspezialisierung) [bearbeiten]
ermittelt den Typ der Elemente von array
(Klassentemplatenspezialisierung) [bearbeiten]

Deduction Guides

(seit C++17)

[bearbeiten] Beispiel

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
 
int main()
{
    // Construction uses aggregate initialization
    std::array<int, 3> a1{{1, 2, 3}}; // Double-braces required in C++11 prior to
                                      // the CWG 1270 revision (not needed in C++11
                                      // after the revision and in C++14 and beyond)
 
    std::array<int, 3> a2 = {1, 2, 3}; // Double braces never required after =
 
    // Container operations are supported
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    // Ranged for loop is supported
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
 
    // Deduction guide for array creation (since C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
 
    // Behavior of unspecified elements is the same as with built-in arrays
    [[maybe_unused]] std::array<int, 2> a5; // No list init, a5[0] and a5[1]
                                            // are default initialized
    [[maybe_unused]] std::array<int, 2> a6{}; // List init, both elements are value
                                              // initialized, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // List init, unspecified element is value
                                               // initialized, a7[0] = 1, a7[1] = 0
}

Ausgabe

3 2 1
E Ǝ

[bearbeiten] Siehe auch

reservierbares, festes Kapazitäts-Array, Inplace, zusammenhängend
(Klassenvorlage) [edit]
reservierbares, zusammenhängendes Array
(Klassenvorlage) [edit]
Doppelt-endende Warteschlange
(Klassenvorlage) [edit]
(Library Fundamentals TS v2)
erstellt ein std::array-Objekt, dessen Größe und optionaler Elementtyp aus den Argumenten abgeleitet werden
(Funktionstemplate) [bearbeiten]