Namespaces
Variants

std:: array

From cppreference.net
Definiert im Header <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 derselben Semantik wie ein struct, das ein C-style-Array T [ N ] als sein einziges nicht-statisches Datenelement hält. Im Gegensatz zu einem C-style-Array zerfällt es nicht automatisch zu T * . Als Aggregattyp kann es mit Aggregatinitialisierung initialisiert werden, wobei maximal N Initialisierer angegeben werden können, die in T konvertierbar sind: std :: array < int , 3 > a = { 1 , 2 , 3 } ; .

Die Struktur kombiniert die Leistung und Zugänglichkeit eines C-Stil-Arrays mit den Vorteilen eines Standard-Containers, wie das Wissen über die eigene Größe, Unterstützung von Zuweisung, Random-Access-Iteratoren, etc.

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

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

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

Inhaltsverzeichnis

Iterator-Invalidierung

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

Template-Parameter

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

Mitgliedertypen

Mitgliedertyp Definition
value_type T
size_type std::size_t
difference_type std::ptrdiff_t
reference value_type &
const_reference const value_type &
pointer value_type *
const_pointer const value_type *
iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu value_type

(bis C++17)

LegacyRandomAccessIterator und LegacyContiguousIterator der ein LiteralType ist zu value_type

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

LegacyRandomAccessIterator , contiguous_iterator und ConstexprIterator zu value_type

(seit C++20)
const_iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu const value_type

(bis C++17)

LegacyRandomAccessIterator und LegacyContiguousIterator der ein LiteralType ist zu const value_type

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

LegacyRandomAccessIterator , contiguous_iterator und ConstexprIterator zu const value_type

(seit C++20)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

Memberfunktionen

Implizit definierte Elementfunktionen
(Konstruktor)
(implizit deklariert)
initialisiert das Array gemäß den Regeln der Aggregatinitialisierung (beachte, dass Standardinitialisierung zu undefinierten Werten für Nicht-Klassen- T führen kann)
(öffentliche Elementfunktion)
(Destruktor)
(implizit deklariert)
zerstört jedes Element des Arrays
(öffentliche Elementfunktion)
operator=
(implizit deklariert)
überschreibt jedes Element des Arrays mit dem entsprechenden Element eines anderen Arrays
(öffentliche Elementfunktion)
Elementzugriff
greift auf spezifiziertes Element mit Bereichsprüfung zu
(öffentliche Elementfunktion)
greift auf spezifiziertes Element zu
(öffentliche Elementfunktion)
greift auf das erste Element zu
(öffentliche Elementfunktion)
greift auf das letzte Element zu
(öffentliche Elementfunktion)
direkter Zugriff auf den zugrundeliegenden zusammenhängenden Speicher
(öffentliche Elementfunktion)
Iteratoren
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion)
gibt einen Iterator zum Ende zurück
(öffentliche Elementfunktion)
gibt einen Reverse-Iterator zum Anfang zurück
(öffentliche Elementfunktion)
gibt einen Reverse-Iterator zum Ende zurück
(öffentliche Elementfunktion)
Kapazität
prüft, ob der Container leer ist
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion)
gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion)
Operationen
füllt den Container mit einem spezifizierten Wert
(öffentliche Elementfunktion)
tauscht die Inhalte aus
(öffentliche Elementfunktion)

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 lexikographisch die Werte von zwei array s
(Funktions-Template)
greift auf ein Element eines array zu
(Funktions-Template)
spezialisiert den std::swap Algorithmus
(Funktions-Template)
(C++20)
erstellt ein std::array Objekt aus einem eingebauten Array
(Funktions-Template)

Hilfsklassen

ermittelt die Größe eines array
(Klassen-Template-Spezialisierung)
ermittelt den Typ der Elemente von array
(Klassen-Template-Spezialisierung)

Deduktionsleitfäden

(seit C++17)

Beispiel

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    // Konstruktion verwendet Aggregatinitialisierung
    std::array<int, 3> a1{{1, 2, 3}}; // Doppelte Klammern erforderlich in C++11 vor
                                      // der CWG 1270 Revision (nicht benötigt in C++11
                                      // nach der Revision und in C++14 und höher)
    std::array<int, 3> a2 = {1, 2, 3}; // Doppelte Klammern nach = nie erforderlich
    // Container-Operationen werden unterstützt
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // Bereichsbasierte for-Schleife wird unterstützt
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
    // Deduktionsleitfaden für Array-Erstellung (seit C++17)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
    // Verhalten nicht spezifizierter Elemente ist gleich wie bei eingebauten Arrays
    [[maybe_unused]] std::array<int, 2> a5; // Keine Listeninitialisierung, a5[0] und a5[1]
                                            // werden standardinitialisiert
    [[maybe_unused]] std::array<int, 2> a6{}; // Listeninitialisierung, beide Elemente werden wert-
                                              // initialisiert, a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // Listeninitialisierung, nicht spezifiziertes Element wird wert-
                                               // initialisiert, a7[0] = 1, a7[1] = 0
}

Ausgabe:

3 2 1
E Ǝ

Siehe auch

Größenveränderbares, festkapazitäres, inplace-kontinuierliches Array
(Klassentemplate)
Größenveränderbares kontinuierliches Array
(Klassentemplate)
Doppelseitige Warteschlange
(Klassentemplate)
(library fundamentals TS v2)
Erstellt ein std::array -Objekt, dessen Größe und optionaler Elementtyp von den Argumenten abgeleitet werden
(Funktionstemplate)