Podręcznik
1. Tablice jednowymiarowe
W tym rozdziale zostaną omówione typy tablicowe. Rozpoczniemy od przedstawienia tablic jednowymiarowych. Tablice jednowymiarowe w języku C++ to struktury danych, które umożliwiają przechowywanie wielu elementów tego samego typu pod jednym wspólnym identyfikatorem. Każdy element w tablicy jest indeksowany, co pozwala na dostęp do konkretnego elementu na podstawie jego położenia.Wielkość pamięci potrzebnej na zapamiętanie tablicy jest określana przez kompilator jako proste przemnożenie ilości elementów w tablicy przez rozmiar pojedynczego elementu. Oczywiście tablica może zawierać elementy dowolnego typu prostego.
Ogólna składnia deklaracji zmiennej tablicowej jest następująca:
typ_elementów nazwa_zmiennej [rozmiar_tablicy];
Poniżej przedstawiono przykład deklaracji i inicjalizacji tablicy pięcioelementowej zawierającej liczby całkowite.typ_elementów nazwa_zmiennej [rozmiar_tablicy];
rozmiar_tablicy musi być dodatnią liczbą, której wartość da się ustalić na etapie kompilacji, a więc musi być wyrażeniem typu całkowitego zawierającym stałe zdefiniowane wcześniej, operatory arytmetyczne i nawiasy. Najczęściej używa się tu liczb całkowitych lub stałych całkowitych.
int tablica[5]; // Deklaracja tablicy na 5 elementów typu int
Należy starać się deklarować tablice wykorzystując do określenia rozmiaru tablicy wcześniej zdefiniowane stałe.
Tablice w języku C++ nie są automatycznie inicjalizowane. Oznacza to, że ich wartości mogą być niezdefiniowane. Można w trakcie inicjalizacji tablicy wstawić do niej wartości za pomocą nawiasów klamrowych.
int tablica[5] = {1,2,3,4,5}
cont int n = 5;
int A[n] = {0};
Standard ISO C++ nie pozwala na wczytywanie rozmiaru tablicy jako zdefiniowanej wcześniej zmiennej. Nie jest wiec możliwe deklarowanie tablic w następujący sposób:
Dostęp do poszczególnych elementów tablicy uzyskuje się za pomocą indeksu. Indeksy rozpoczynają się od wartości
int n;
cin >> n;
double A[n];
Tablice o zmiennym rozmiarze (ang. VLAs — Variable Length Arrays) są obsługiwane w niektórych innych językach, takich jak C (od standardu C99), ale nie są częścią standardu C++. Niektóre kompilatory (np. GCC) mogą je wspierać jako rozszerzenie specyficzne dla kompilatora, ale nie jest to zgodne ze standardem. Używanie tego rodzaju rozszerzeń może prowadzić do kodu, który nie jest przenośny między różnymi kompilatorami i środowiskami.
0
, natomiast kończą się na wartości n-1
(gdzie n
to rozmiar tablicy). A więc w przypadku deklaracji int a[5]; ostatnim elementem tablicy jest element o indeksie 4, czyli a[4]. Zobaczcie to na rysunku:W przypadku przekroczenia zakresu indeksu, czyli odwołania się do nieistniejącego elementu tablicy, wystąpi błąd w trakcie wykonywania programu. Przekroczenie zakresu indeksu tablicy jest często spotykanym, a przy tym wyjątkowo trudnym do zlokalizowania błędem w programach pisanych w C++.
Poniżej przedstawiono przykład odwołania do pierwszego oraz trzeciego elementu tablicy.
int pierwszyElement = tablica[0]; // Dostęp do pierwszego elementu.
int trzeciElement = tablica[2]; // Dostęp do trzeciego elementu.
tablica[0] = 10; // Zmieniamy wartość pierwszego elementu na 10.
tablica[1] = 20; // Zmieniamy wartość drugiego elementu na 20.
const int n = 5;
int A[n]={0};
// wczytywanie danych do tablicy
for (int i = 0; i < n; i++)
cin >> A[i];
// drukowanie zawartości tablicy
for (int i = 0; i < n; i++)
cout << A[i] << endl;
W nagranej symulacji przepisywania cyklicznego występuje zmienna o nazwie schowek. Jest to zmienna tego samego typu co elementy znajdujące się w tablicy. Służy do zapamiętania wartości ostatniej w tablicy, aby nie została nadpisana. W taki sposób możliwa jest zamiana wartości pomiędzy dwiema zmiennymi. Nie ma możliwości wykonania takiej operacji w inny sposób niż przy wykorzystaniu zmiennej pomocniczej.