C++ Academy · leksjon

Endrende algoritmer: transform, copy_if, replace

Transformer, filtrer og erstatt elementer med standardalgoritmer.

Leksjon 2 av 414 trinn

Endrende algoritmer: transform, copy_if, replace er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Modifiserende algoritmer

Disse algoritmene skriver til et utdataområde – enten på stedet eller via en destinasjonsiterator.

std::copy

Kopier et område til et annet. Utdataområdet må være stort nok, eller De må oppgi en inserter.

#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

Kopier elementene som samsvarer med et predikat.

std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
    std::back_inserter(evens),
    [](int x) { return x % 2 == 0; });

std::transform

Bruk en funksjon på hvert element og skriv resultatet. Tilsvarer map i andre språk.

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 med to områder

Kombiner to inndataområder med en binærfunksjon.

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 og std::replace_if

Erstatt elementer som er lik en verdi (eller samsvarer med et predikat), på stedet.

std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}

std::fill

Sett hvert element i et område til en verdi.

std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}

std::generate

Sett hvert element til resultatet av å kalle en funksjon. Nyttig for generering av sekvenser.

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

Fra <numeric> – fyller en range med sekvensielt økende verdier.

#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}

std::reverse

Reverser elementene i en range in-place.

std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}

std::rotate

Roterer elementene slik at elementet ved middle blir det nye første elementet. Det opprinnelige første elementet flyttes til slutten av den roterte rangen.

Erase-Remove med std::remove

remove flytter uønskede elementer bakerst og returnerer en iterator til den nye logiske slutten. Kombiner den med erase for å faktisk gjøre rangen mindre.

v.erase(
    std::remove(v.begin(), v.end(), 0),
    v.end()
);

Kunnskapssjekk

Hvilken algoritme passer best til «bruke en funksjon på hvert element og bygge en ny container»?

Oppsummering

Algoritmer som endrer data, skriver resultater: copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate og erase-remove-idiomet.

Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Endrende algoritmer: transform, copy_if, replace» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Endrende algoritmer: transform, copy_if, replace», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Endrende algoritmer: transform, copy_if, replace»?

Transformer, filtrer og erstatt elementer med standardalgoritmer. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Endrende algoritmer: transform, copy_if, replace»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Algoritmer som ikke endrer data: find, count, all_of
  2. Endrende algoritmer: transform, copy_if, replace
  3. Sortering og partisjonering: sort, stable_partition
  4. Numeriske algoritmer: accumulate, reduce, transform_reduce
← Tilbake til C++ Academy