Skip to content

Latest commit

 

History

History
95 lines (72 loc) · 5.48 KB

02-array.md

File metadata and controls

95 lines (72 loc) · 5.48 KB

std::array<T, N>

Tablica o stałym rozmiarze

Coders School

Cechy std::array<T, N>

  • Cache-friendly
    • Elementy są ułożone obok siebie w pamięci, tak jak w zwykłej tablicy
    • Iterując po std::array<T, N>, kolejne jego elementy będą ładowane do pamięci podręcznej procesora z wyprzedzeniem, co niesamowicie przyspieszy odczytywanie danych
  • Typ T może być dowolny. Zarówno typ wbudowany jak int, double, jak i własny zdefiniowany przez nas typ
  • Typ N oznacza rozmiar tablicy, który musi być znany już w czasie kompilacji
  • std::array jest najprymitywniejszym wrapperem na zwykłe tablice, używanie jej jest praktycznie tak samo wydajne
  • Rozmiar się nie zmienia, więc:
    • nie możemy dodawać nowych elementów
    • nie możemy usunąć istniejących elementów
    • możemy dokonać modyfikacji istniejących elementów

Operacje na std::array<T, N>

Operacja Metody
dodawanie elementu nie da się
modyfikacja/dostęp do elementu at(), operator[]
pierwszy/ostatni element back(), front()
rozmiar size()
odwrócony (ang. reverse) iterator rbegin(), rend()
stały iterator cbegin(), cend(), crbegin(), crend()
wyczyszczenie kontenera nie da się, można użyć fill(), aby wyzerować wszystkie elementy
przygotowanie elementu do usunięcia nie da się
wymazanie elementów z pamięci nie da się

Przekazanie std::array<T, N> do funkcji

Ponieważ std::array<T, N> ma 2 parametry szablonowe, niektórzy mogą mieć problem przy przekazywaniu jej do funkcji, gdyż pisząc std::array<T> zapominają o rozmiarze tablicy.

void print(const std::array<int, 10>& arr) {
    for (const auto& el : arr) {
        std::cout << el << ' ';
    }
    std::cout << '\n';
}

int main() {
    std::array<int, 10> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    print(arr);

    return 0;
}

Zadanie 1

  • Pomyśl, kiedy empty() może zwrócić true dla std::array
  • Znajdź dokumentację funkcji empty() dla std::array na cppreference.com
  • Przejdź do sekcji Example i kliknij Run przy przykładzie z kodem
  • Dopisz nową tablicę intów o rozmiarze 3 i nazwie other bez przypisywania jej elementów - std::array<int, 3> other;
  • Dodaj kod odpowiedzialny za wyświetlenie informacji czy ta tablica jest pusta.
  • Zweryfikuj to ze swoją intuicją z pierwszego punktu 🙂
  • Wypisz zawartość tablicy other
  • Zmień kompilator np. na clang i zobacz czy zawartość jest ta sama

Zadanie 2

  • Znajdź dokumentację std::array na cppreference.com
  • Stwórz nowy plik i napisz funkcję main()
  • Stwórz std::array przechowujący wartości całkowitoliczbowe o rozmiarze 10
  • Wypełnij ją wartościami 5
  • Do czwartego elementu przypisz wartość 3
  • Stwórz inną tablicę o tym samym rozmiarze
  • Podmień tablice
  • Wypisz obie tablice, każdą w osobnej linii

Q&A