Tablice

Tablica jest strukturą danych złożoną z określonej liczby elementów tego samego typu. Przykładowo int T[5] jest deklaracją 5-cio elementowej tablicy (wektora) typu int, wtedy kolejne elementy tablicy to T[0], T[1], T[2], T[3], T[4]. Dostęp do poszczególnych elementów tablicy uzyskuje się poprzez użycie operatora [ ], tak jak w przykładzie poniżej:
for ( i=0 ; i<5 ; i++ )
  T[i]=i*i;

W języku C++ indeks tablicy zawsze zaczyna się od 0. Tak więc w rozważanym przykładzie T[4] jest ostatnim elementem tablicy (a nie T[5]!!!).

Można też tworzyć tablice dwu- i więcej wymiarowe. Na przykład


double A[10][10];
jest deklaracją tablicy dwuwymiarowej o rozmiarze 10x10. Przykład: tab.cpp.

Znaki, łańcuchy znaków

Typ znakowy to char. Łańcuchy w języku C++ to tablice znaków (tablice typu char ).
char z='a';
char Tekst[]="Abc";
Instrukcje te deklarują zmienną znakową z, oraz łańcuch znaków Tekst, oraz inicjują je. Wtedy T[0]='A', T[1]='b', T[2]='c' oraz T[3]='\0' (znacznik końca łańcucha).

W C i C++ typ znakowy jest typem całkowitym, tzn. zmienne znakowe można traktować tak jak liczby całkowite równe ich kodom ASCII. Zatem

cout << (int)'A';
spowoduje wypisanie kodu znaku A. Instrukcja (int)'A' powoduje zrzutowanie wartości typu char na typ int. Ponadto na zmiennych znakowych można wykonywać działania arytmetyczne. Np.
char x='a', y='f';
x++;
y=y+'A'-'a';
Po tych instrukcjach zmienna x jest równa 'b', zaś y jest równa 'F' (w zmiennej y litera została zamieniona na dużą). Przykład: tab2.cpp.

Typowe błędy

Należy pamiętać, że standardowo w C/C++ nie ma kontroli dostępu do tablic.

Jeśli odwołujemy się do elementu tablicy który nie istnieje np:

const int TAB_SIZE=100;

int main(){
  int T[TAB_SIZE];
  int n=5000;
  T[n]=0;
  return 0;
}
To odwołanie do nieistniejącej komórki nie zostanie zasygnalizowane w fazie kompilacji, a w fazie wykonania może przynieść nieoczekiwane efekty. Najprzyjemniejszym jest komunikat systemowy:
Naruszenie ochrony pamięci
W systemie SPOJ błąd ten jest sygnalizowany przez komunikat:
runtime error (SIGSEGV). 

Przykładowe ćwiczenia

Wróć