Ten artykuł nie jest skończony. Możesz pomóc w jego ukończeniu edytując tą stronę.
Pętle
W tej lekcji każemy programowi wykonywać wielokrotnie dany kod, czyli skorzystamy z pętli.
Motywacja
Pętle mają wiele zastosowań, oto kilka z nich:
- 👾 dodanie np. 10 nowych przeciwników do planszy w grze
- 🖥 wyświetlenie każdego elementu z tablicy
- ➗ wielokrotne wykonanie obliczeń (np. liczenie silni, ciąg fibonacciego)
W lekcji o wektorach pokazaliśmy już jedną pętlę, która wyświetlała wszystkie elementy tablicy:
for (int n : numbers)
{
std::cout << n << ' ';
}
Jest to najprostsza wersja pętli w C++. W następnych sekcjach poznasz więcej ich rodzajów.
Rodzaje pętli
W C++ mamy następujące pętle:
for- wersja dla zasięgów (range-based for)
- wersja podstawowa
whiledo ... while
Najczęściej używana jest for oraz while i o nich powiemy w tej lekcji.
Jeśli chcesz poczytać o pętli do ... while to zapoznaj się z artykułem:
Pętla do ... while.
Iteracja - pojedynczy obieg pętli.
Wytłumaczenie
Pętla for (range-based)
Ten rodzaj pętli jest najczęściej stosowany do pracy z tablicami, choć może być użyty też w inny sposób.

W przykładzie pokazanym w sekcji Motywacja znajduje się właśnie
pętla range-based for, czyli wersja pętli for dla tzw. zasięgów.
Tablica w rozumieniu C++ również jest takim zasięgiem, więc możemy śmiało z niej skorzystać.
Najprostszy przykład:
std::vector<int> numbers = { 13, 42, -1, 0, -3, -5 };
for (int n : numbers)
{
std::cout << n << ' ';
}
Ta pętla kolejno przechodzi przez każdy element tablicy numbers i zapisuje go do
zmiennej n. Następnie wykonywany jest blok kodu zawarty w nawiasie klamrowym.
W tym wypadku jest to wyświetlenie liczby.
Zwróć uwagę, że po nazwie zmiennej n znajduje się dwukropek (:), nie średnik (;)!
Nie używamy w tym zapisie żadnego znaku równości (=), bo wartość każdego elementu po
kolei będzie automatycznie przypisywana do n.
Pętla while

Celowo przechodzimy teraz do pętli while, zamiast do zwykłego for, ponieważ ułatwi to wyjaśnienia.
Pętla while wykonuje ciało pętli dopóki warunek jest spełniony:
int number = 0;
while (number <= 3)
{
std::cout << number << ' ';
number++;
}
0 1 2 3
Warunek zostanie sprawdzony przed każdym obiegiem pętli i tak długo jak jest on spełniony,
czyli w tym wypadku tak długo jak number jest mniejsza lub równa 3, to będzie wykonywane ciało:
- wyświetlenie
number - zwiększenie
numbero 1
Po ostatnim obiegu pętli, wartość number będzie równa 4, więc warunek nie będzie spełniony,
przez co pętla się zakończy i komputer przejdzie do wykonywania następnych instrukcji.
Pętla for

Ta pętla jest uproszczeniem pewnego bardzo często powtarzającego się schematu i jest ona zazwyczaj używana do krokowego przejścia przez pewien zakres (np. liczbowy).
Zacznijmy od przykładu:
for (int i = 0; i < 10; i++)
{
std::cout << i << ' ';
}
Powyższa pętla wyświetla liczby od 0 do 9. Nawias okrągły przy for składa się z trzech części,
oddzielonych średnikami:
| Fragment | Opis |
|---|---|
int i = 0 | instrukcja początkowa (zazwyczaj utworzenie zmiennej) |
i < 10 | warunek |
i++ | wyrażenie iteracji |
Gdy program zaczyna wykonywać pętlę for, jednorazowo wykonuje instrukcję początkową - w naszym wypadku
tworzy zmienną i nadaje jej wartość 0.
Program następnie:
- sprawdzi warunek
- niespełniony: wyjdź z pętli
- spełniony: idź do punktu 2
- wykona ciało pętli
- wykona wyrażenie iteracji i przejdzie do pkt. 1
Powyższa pętla for jest równoznaczna z:
int i = 0;
while (i < 10)
{
std::cout << i << ' ';
i++;
}
Iteracja po tablicach
Pętli for bardzo często używamy do iterowania po tablicach, w sytuacji gdy
albo potrzebujemy mieć dostęp do numeru iteracji lub gdy nie chcemy iterować
po całym zakresie.
std::vector<int> numbers = {10, 13, 15, 18, 60};
for (int i = 0; i < numbers.size(); i++)
{
std::cout << "numbers[" << i << "]: " << numbers[i] << '\n';
}
std::vector<int> numbers = {10, 13, 15, 18, 60};
for (int i = 0; i < numbers.size() / 2; i++)
{
std::cout << "numbers[" << i << "]: " << numbers[i] << '\n';
}
Pusty nawias
Kod podawany w nawiasie pętli for jest opcjonalny. Średniki są wymagane.
for ( ; ; )
{
// kod
}
Powyższy zapis sprawi, że pętla for będzie wykonywała się w nieskończoność (ze względu na pusty warunek),
chyba że przerwiemy ją manualnie...
Przerwanie pętli
Pętlę możemy przerwać w dowolnym momencie za pomocą instrukcji break:
for (int i = 0; i < 10; i++)
{
if (i == 5)
break;
std::cout << i << ' ';
}
Ta pętla wyświetli liczby od 0 do 4, ponieważ przy i równym 5 wykonanie pętli zostanie przerwane.
W ten sam sposób możemy przerwać pętlę while.