Iterowanie po wektorach: indeksy, range-for, iteratory
Iteruj po wektorze za pomocą indeksów, range-for i jawnych iteratorów
Iterowanie po wektorach: indeksy, range-for, iteratory to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Trzy sposoby iteracji
Po wektorze można przejść za pomocą:
- pętli indeksowej
for (size_t i = 0; i < v.size(); ++i) - pętli opartej na zakresie
for (auto& x : v) - iteratorów
for (auto it = v.begin(); it != v.end(); ++it)
Pętla indeksowa
Znana z języka C. Przydatna, gdy oprócz wartości potrzebujesz także indeksu.
for (size_t i = 0; i < v.size(); ++i) {
std::cout << i << ": " << v[i] << "\n";
}size_t a int
size() zwraca wartość typu size_t, czyli typu bez znaku. Mieszanie jej z licznikiem typu int ze znakiem powoduje ostrzeżenia kompilatora i trudne do wykrycia błędy. Używaj size_t albo std::ssize z C++20.
Pętla for oparta na zakresie
Najbardziej przejrzysta forma, gdy nie potrzebujesz indeksów. Wybierz właściwy kwalifikator referencji.
for (const auto& x : v) std::cout << x << " "; // read only
for (auto& x : v) x *= 2; // modify in placeIteratory
Iterator jest uogólnionym wskaźnikiem. v.begin() wskazuje pierwszy element, a v.end() — miejsce tuż za ostatnim.
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}const_iterator
Używaj cbegin() i cend(), gdy nie musisz modyfikować elementów — typem iteratora jest const_iterator.
Iteratory odwrotne
rbegin() i rend() przechodzą od końca do początku. Wyłuskanie iteratora zwraca te same elementy, ale w odwrotnej kolejności.
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}Arytmetyka iteratorów
Iteratory wektora zapewniają dostęp swobodny: można dodawać do nich i odejmować od nich liczby całkowite oraz porównywać je za pomocą <.
auto it = v.begin();
it += 3; // skip 3 elements
std::cout << *it;Algorytmy używają iteratorów
Algorytmy STL przyjmują pary iteratorów. Przekazuj v.begin(), v.end() do algorytmów takich jak std::sort lub std::find.
#include <algorithm>
std::sort(v.begin(), v.end());
auto it = std::find(v.begin(), v.end(), 42);Kiedy iteratory tracą ważność
Dodanie elementu do wektora może spowodować realokację. Wszystkie iteratory, wskaźniki i referencje do elementów wektora tracą ważność po każdej operacji zmieniającej jego pojemność.
Pułapka: modyfikowanie podczas iteracji
Nigdy nie wywołuj push_back ani erase podczas pętli opartej na zakresie przechodzącej po tym samym wektorze. Utwórz nowy wektor albo zbierz indeksy i wykonaj operacje później.
Szybkie sprawdzenie
W której formie iteracji iterator traci ważność, jeśli push_back spowoduje realokację?
Podsumowanie
Wybierz pętlę opartą na zakresie, gdy nie potrzebujesz indeksów, pętlę indeksową, gdy ich potrzebujesz, oraz pętlę iteratorową podczas pracy z algorytmami. Realokacja unieważnia iteratory — nigdy nie wywołuj push_back podczas iteracji.
Często zadawane pytania
Czy lekcja „Iterowanie po wektorach: indeksy, range-for, iteratory” jest bezpłatna?
Tak — pełny tekst „Iterowanie po wektorach: indeksy, range-for, iteratory” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Iterowanie po wektorach: indeksy, range-for, iteratory”?
Iteruj po wektorze za pomocą indeksów, range-for i jawnych iteratorów Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Iterowanie po wektorach: indeksy, range-for, iteratory”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy std::vector: push_back, size, capacity
- Iterowanie po wektorach: indeksy, range-for, iteratory
- Modyfikowanie wektorów: insert, erase, clear
- Vector a std::array i tablica C