Ændring: transform, copy_if, replace
Transformér, filtrér og erstat elementer med standardalgoritmer
Æ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.
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
- Algoritmer uden ændring: find, count, all_of
- Ændring: transform, copy_if, replace
- Sortering og partitionering: sort, stable_partition
- Numeriske algoritmer: accumulate, reduce, transform_reduce