std::array
| Definiert in der Header-Datei <array> |
||
| template< class T, |
(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. |
| Dieser Abschnitt ist unvollständig Grund: Vervollständigen Sie die Beschreibungen der Template-Parameter. |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition | ||||||
value_type
|
T | ||||||
size_type
|
std::size_t | ||||||
difference_type
|
std::ptrdiff_t | ||||||
Referenz
|
value_type& | ||||||
const_reference
|
const value_type& | ||||||
Zeiger
|
value_type* | ||||||
const_pointer
|
const value_type* | ||||||
iterator
|
| ||||||
const_iterator
|
| ||||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[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) | |
| Greift auf ein bestimmtes Element zu (public member function) | |
| Greift auf das erste Element zu (public member function) | |
| Greift auf das letzte Element zu (public member function) | |
| Direkter Zugriff auf den zugrundeliegenden zusammenhängenden Speicher (public member function) | |
Iteratoren | |
| gibt einen Iterator zum Anfang zurück (public member function) | |
| gibt einen Iterator zum Ende zurück (public member function) | |
| gibt einen Reverse-Iterator zum Anfang zurück (public member function) | |
| gibt einen Reverse-Iterator zum Ende zurück (public member function) | |
Kapazität | |
| prüft, ob der Container leer ist (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function) | |
Operationen | |
| füllt den Container mit einem angegebenen Wert (öffentliche Member-Funktion) | |
| tauscht die Inhalte (public member function) | |
[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) |
| (C++11) |
greift auf ein Element eines arrays zu(Funktionstemplate) |
| (C++11) |
spezialisiert den Algorithmus std::swap (function template) |
| (C++20) |
erstellt ein std::array-Objekt aus einem eingebauten Array(Funktionsschablone) |
[bearbeiten] Hilfsklassen
| (C++11) |
ermittelt die Größe eines arrays(Klassentemplatenspezialisierung) |
ermittelt den Typ der Elemente von array(Klassentemplatenspezialisierung) |
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
| (C++26) |
reservierbares, festes Kapazitäts-Array, Inplace, zusammenhängend (Klassenvorlage) |
| reservierbares, zusammenhängendes Array (Klassenvorlage) | |
| Doppelt-endende Warteschlange (Klassenvorlage) | |
| (Library Fundamentals TS v2) |
erstellt ein std::array-Objekt, dessen Größe und optionaler Elementtyp aus den Argumenten abgeleitet werden (Funktionstemplate) |