Endrende algoritmer: transform, copy_if, replace
Transformer, filtrer og erstatt elementer med standardalgoritmer.
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.
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
- Algoritmer som ikke endrer data: find, count, all_of
- Endrende algoritmer: transform, copy_if, replace
- Sortering og partisjonering: sort, stable_partition
- Numeriske algoritmer: accumulate, reduce, transform_reduce