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.

This container is an aggregate type with the same semantics as a struct holding a C-style array T[N] as its only non-static data member. Unlike a C-style array, it doesn't decay to T* automatically. As an aggregate type, it can be initialized with aggregate-initialization given at most N initializers that are convertible to T: std::array<int, 3> a = {1,2,3};.(wymaga tłumaczenia)

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, itd.

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_type T [edit]
size_type std::size_t [edit]
difference_type std::ptrdiff_t [edit]
reference value_type& [edit]
const_reference const value_type& [edit]
pointer value_type*[edit]
const_pointer const value_type*[edit]
iterator RandomAccessIterator [edit]
const_iterator Constant RandomAccessIterator [edit]
reverse_iterator std::reverse_iterator<iterator> [edit]
const_reverse_iterator std::reverse_iterator<const_iterator> [edit]

[edytuj] Metody

Niejawnie definiowane metody
(constructor)
(niejawnie zadeklarowany)
inicjalizuje tablicę według następujących zasad: aggregate initialization (zauważ, ż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] 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 kontenerze
    std::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 for
    for(const auto& s: a3)
        std::cout << s << ' ';
}

Wynik:

3 2 1 
a b