C++ Academy · Lektion

Ændring: transform, copy_if, replace

Transformér, filtrér og erstat elementer med standardalgoritmer

Lektion 2 af 414 trin

Ændring: transform, copy_if, replace er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Ændrende algoritmer

Disse algoritmer skriver til et resultatområde — enten på stedet eller via en destinationsiterator.

std::copy

Kopiér et område til et andet. Resultatområdet skal være stort nok, eller du skal angive en indsætter.

#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

Kopiér elementer, der matcher et prædikat.

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

std::transform

Anvend en funktion på hvert element, og skriv resultatet. Det svarer til map i andre sprog.

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

Kombinér to inputområder med en binær funktion.

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

Erstat elementer, der er lig med en værdi (eller matcher et prædikat), 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

Sæt hvert element i et område til en værdi.

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

std::generate

Sæt hvert element til resultatet af et funktionskald. Nyttigt til generering af 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> — udfylder et område med sekventielt stigende værdier.

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

std::reverse

Vend elementerne i et område på stedet.

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

std::rotate

Drej elementerne, så elementet ved middle bliver det nye første element. Det oprindeligt første element flyttes til slutningen af det roterede område.

Erase-remove med std::remove

remove flytter uønskede elementer bagud og returnerer en iterator til den nye logiske slutning. Kombinér den med erase for faktisk at formindske containeren.

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

Hurtigt tjek

Hvilken algoritme passer bedst til "anvend en funktion på hvert element, og opbyg en ny container"?

Opsummering

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

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Ændring: transform, copy_if, replace” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Ændring: transform, copy_if, replace”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Ændring: transform, copy_if, replace”?

Transformér, filtrér og erstat elementer med standardalgoritmer Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Ændring: transform, copy_if, replace”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Algoritmer uden ændring: find, count, all_of
  2. Ændring: transform, copy_if, replace
  3. Sortering og partitionering: sort, stable_partition
  4. Numeriske algoritmer: accumulate, reduce, transform_reduce
← Tilbage til C++ Academy