Modyfikowanie: transform, copy_if, replace
Przekształcaj, filtruj i zastępuj elementy za pomocą standardowych algorytmów
Modyfikowanie: transform, copy_if, replace 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.
Algorytmy modyfikujące
Algorytmy te zapisują do zakresu wyjściowego — bezpośrednio lub za pośrednictwem iteratora docelowego.
std::copy
Kopiuje jeden zakres do drugiego. Zakres wyjściowy musi być wystarczająco duży albo należy podać iterator wstawiający.
#include <algorithm>
#include <iterator>
std::vector<int> src = {1, 2, 3};
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));std::copy_if
Kopiuje elementy spełniające predykat.
std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
std::back_inserter(evens),
[](int x) { return x % 2 == 0; });std::transform
Stosuje funkcję do każdego elementu i zapisuje wynik. Odpowiada funkcji map w innych językach.
std::vector<int> v = {1, 2, 3};
std::vector<int> sq;
std::transform(v.begin(), v.end(),
std::back_inserter(sq),
[](int x) { return x * x; });
// sq is {1, 4, 9}transform dla dwóch zakresów
Łączy dwa zakresy wejściowe za pomocą funkcji dwuargumentowej.
std::vector<int> a = {1, 2, 3};
std::vector<int> b = {10, 20, 30};
std::vector<int> sum;
std::transform(a.begin(), a.end(), b.begin(),
std::back_inserter(sum), std::plus<int>{});
// sum is {11, 22, 33}std::replace i std::replace_if
Zastępuje w miejscu elementy równe danej wartości (lub spełniające predykat).
std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}std::fill
Ustawia każdy element zakresu na daną wartość.
std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}std::generate
Ustawia każdy element na wynik wywołania funkcji. Jest to przydatne do generowania sekwencji.
std::vector<int> v(5);
int n = 0;
std::generate(v.begin(), v.end(), [&]() { return n++; });
// v is {0, 1, 2, 3, 4}std::iota
Z nagłówka <numeric> — wypełnia zakres kolejno rosnącymi wartościami.
#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}std::reverse
Odwraca kolejność elementów zakresu w miejscu.
std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}std::rotate
Obraca elementy tak, aby element wskazywany przez middle stał się nowym pierwszym elementem. Pierwszy element z oryginalnego zakresu trafia na koniec obróconego regionu.
Usuwanie za pomocą std::remove
remove przesuwa niepożądane elementy na koniec i zwraca iterator wskazujący nowy logiczny koniec. Należy połączyć go z erase, aby faktycznie zmniejszyć rozmiar kontenera.
v.erase(
std::remove(v.begin(), v.end(), 0),
v.end()
);Szybki test
Który algorytm najlepiej pasuje do zadania „zastosować funkcję do każdego elementu i utworzyć nowy kontener”?
Podsumowanie
Algorytmy modyfikujące zapisują wyniki: copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate oraz idiom erase-remove.
Często zadawane pytania
Czy lekcja „Modyfikowanie: transform, copy_if, replace” jest bezpłatna?
Tak — pełny tekst „Modyfikowanie: transform, copy_if, replace” 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 „Modyfikowanie: transform, copy_if, replace”?
Przekształcaj, filtruj i zastępuj elementy za pomocą standardowych algorytmó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 „Modyfikowanie: transform, copy_if, replace”?
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
- Algorytmy niemodyfikujące: find, count, all_of
- Modyfikowanie: transform, copy_if, replace
- Sortowanie i partycjonowanie: sort, stable_partition
- Algorytmy numeryczne: accumulate, reduce, transform_reduce