0Pricing
C++ Academy · Lekcja

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

  1. Algorytmy niemodyfikujące: find, count, all_of
  2. Modyfikowanie: transform, copy_if, replace
  3. Sortowanie i partycjonowanie: sort, stable_partition
  4. Algorytmy numeryczne: accumulate, reduce, transform_reduce
← Powrót do C++ Academy