Przestrzenie nazw
Warianty
Działania

std::array

Z cppreference.com
< cpp‎ | container
Zdefiniowane w nagłówku <array>
template<

    class T,
    std::size_t N

>struct array;
(1) (od C++11)

std::array (tablica) jest kontenerem enkapsulującym tablice o stałej, ustalonej w trakcie kompilacji liczbie elementów.

Ten kontener jest typem agregowanym o identycznej semantyce, jak struktura przechowująca tablicę w stylu CT[N] jako jedyną niestatyczną składową. W przeciwieństwie do tablicy w stylu C, nie sprowadza się(ang) auomatycznie do wskaźnika T*.

Jako typ agregowany, może być zainicjalizowana korzystając z zasad aggregate-initialization, poprzez nie więcej niż N inicjalizatorów konwertowalnych do T: std::array<int, 3> a ={1,2,3};.

Ta struktura łączy w sobie wydajność i dostępność tablic w stylu języka C, z wszystkimi korzyściami standardowego kontenera, takimi jak: znajomość własnego rozmiaru, wspieranie przypisywania, iteratory dostępu bezpośredniego.

std::array spełnia wymagania Container i ReversibleContainer z wyjątkiem tego, że domyślnie utworzona tablica nie jest pusta i złożoność zamiany dwóch tablic jest liniowa, częściowo spełnia też wymagania SequenceContainer.

Tablica długości 0 jest specjalnym przypadkiem (N == 0). Wtedy, array.begin()== array.end(). Efekt wywołania front() lub back() na tablicy długości 0 jest niezdefiniowany.

Tablica taka może zostać wykorzystana jako krotka N elementów tego samego typu.

Spis treści

[edytuj]Unieważnienie iteratorów

Z reguły, iteratory tablicy nigdy nie są unieważnione, przez cały czas istnienia tablicy. Trzeba jednak wziąć pod uwagę, że po wykonaniu swap, iterator będzie wskazywał na ten sam (pod względem kolejności) element tablicy, który będzie już po wykonaniu zamiany innym elementem (może mieć inną wartość).

[edytuj]Typy składowe

Typ składowy Definicja
value_typeT[edit]
size_typestd::size_t[edit]
difference_typestd::ptrdiff_t[edit]
referencevalue_type&[edit]
const_referenceconst value_type&[edit]
pointervalue_type*[edit]
const_pointerconst value_type*[edit]
iteratorLegacyRandomAccessIterator and ConstexprIterator(od C++20)that is a LiteralType(od C++17)[edit]
const_iterator Constant RandomAccessIterator[edit]
reverse_iteratorstd::reverse_iterator<iterator>[edit]
const_reverse_iteratorstd::reverse_iterator<const_iterator>[edit]

[edytuj]Metody

Niejawnie definiowane metody
(constructor)
(niejawnie zadeklarowany)
inicjalizuje tablicę według następujących zasad: aggregate initialization (należy zwrócić uwagę, że domyślna inicjalizacja może skutkować niedeterministycznymi wartościami for non-class T(wymaga tłumaczenia))
(publiczna metoda)
(destructor)
(niejawnie zadeklarowany)
niszczy wszystkie elementy tablicy
(publiczna metoda)
operator=
(niejawnie zadeklarowany)
nadpisuje wszystkie elementy tablicy odpowiadającymi elementami innej tablicy
(publiczna metoda)
Dostęp do elementów
dostęp do wskazanego elementu, ze sprawdzeniem zakresów
(publiczna metoda)[edit]
dostęp do wskazanego elementu
(publiczna metoda)[edit]
dostęp do pierwszego elementu
(publiczna metoda)[edit]
dostęp do ostatniego elementu
(publiczna metoda)[edit]
bezpośredni dostęp do tablicy opakowywanej przez kontener
(publiczna metoda)[edit]
Iteratory
zwraca iterator na początek kontenera
(publiczna metoda)[edit]
zwraca iterator za koniec kontenera
(publiczna metoda)[edit]
zwraca odwrócony iterator na początek
(publiczna metoda)[edit]
zwraca odwrócony iterator za koniec kontenera
(publiczna metoda)[edit]
Pojemność
sprawdza, czy kontener jest pusty
(publiczna metoda)[edit]
zwraca liczbę elementów
(publiczna metoda)[edit]
zwraca maksymalną możliwą liczbę elementów
(publiczna metoda)[edit]
Operacje
Wypełnia kontener wskazaną wartością
(publiczna metoda)[edit]
zamienia zawartość
(publiczna metoda)[edit]

[edytuj]Funkcje operujące na zawartości

leksykograficznie porównuje wartości w array
(szablon funkcji)[edit]
dostęp do konkretnego elementu array
(szablon funkcji)[edit]
specjalizacja dla algorytmu std::swap
(szablon funkcji)[edit]

[edytuj]Klasy pomocnicze

uzyskuje rozmiar kontenera array
(specjalizacja szablonu klasy)[edit]
uzyskuje typ elementów kontenera array
(specjalizacja szablonu klasy)[edit]

[edytuj]Deduction guides(od C++17)

[edytuj]Przykład

#include <string>#include <iterator>#include <iostream>#include <algorithm>#include <array>   int main(){// tworzenie wykorzystujące inicjalizację zbiorczą (aggregate initialization) std::array<int, 3> a1{{1, 2, 3}};// podwójne klamry są wymagane  std::array<int, 3> a2 ={1, 2, 3};// nie są już potrzebne po = std::array<std::string, 2> a3 ={std::string("a"), "b"};   // Pozwala na wykonywanie operacji jak na zwykłym kontenerzestd::sort(a1.begin(), a1.end());std::reverse_copy(a2.begin(), a2.end(), std::ostream_iterator<int>(std::cout, " "));   std::cout<<'\n';   // Pozwala na użycie zakresowej pętli forfor(constauto& s: a3)std::cout<< s <<' ';}

Wynik:

3 2 1 a b
close