Verändernde Algorithmen: transform, copy_if, replace
Transformieren, filtern und ersetzen Sie Elemente mit Standardalgorithmen.
Verändernde Algorithmen: transform, copy_if, replace ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Verändernde Algorithmen
Diese Algorithmen schreiben in einen Ausgabebereich – entweder direkt in den bestehenden Bereich oder über einen Zieliterator.
std::copy
Kopiert einen Bereich in einen anderen. Der Ausgabebereich muss groß genug sein, oder Sie müssen einen Inserter bereitstellen.
#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
Kopiert Elemente, die ein Prädikat erfüllen.
std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
std::back_inserter(evens),
[](int x) { return x % 2 == 0; });std::transform
Wendet eine Funktion auf jedes Element an und schreibt das Ergebnis. Ähnlich wie map in anderen Sprachen.
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 mit zwei Bereichen
Kombiniert zwei Eingabebereiche mit einer binären 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 und std::replace_if
Ersetzt Elemente, die einem Wert entsprechen (oder ein Prädikat erfüllen), direkt im Bereich.
std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}std::fill
Setzt jedes Element eines Bereichs auf einen bestimmten Wert.
std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}std::generate
Setzt jedes Element auf das Ergebnis eines Funktionsaufrufs. Nützlich zum Erzeugen von Sequenzen.
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
Aus <numeric> – füllt einen Bereich mit aufeinanderfolgenden, ansteigenden Werten.
#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}std::reverse
Kehren Sie die Elemente eines Bereichs direkt im Bereich um.
std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}std::rotate
Rotiert die Elemente so, dass das Element an der Position middle zum neuen ersten Element wird. Das ursprüngliche erste Element gelangt ans Ende des rotierten Bereichs.
Erase-Remove mit std::remove
remove verschiebt unerwünschte Elemente nach hinten und gibt einen Iterator auf das neue logische Ende zurück. Kombinieren Sie es mit erase, um den Bereich tatsächlich zu verkleinern.
v.erase(
std::remove(v.begin(), v.end(), 0),
v.end()
);Schnelltest
Welcher Algorithmus eignet sich am besten dafür, eine Funktion auf jedes Element anzuwenden und einen neuen Container aufzubauen?
Zusammenfassung
Modifizierende Algorithmen schreiben Ergebnisse: copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate und das Erase-Remove-Idiom.
Häufig gestellte Fragen
Ist die Lektion „Verändernde Algorithmen: transform, copy_if, replace“ kostenlos?
Ja — der vollständige Text von „Verändernde Algorithmen: transform, copy_if, replace“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Verändernde Algorithmen: transform, copy_if, replace“?
Transformieren, filtern und ersetzen Sie Elemente mit Standardalgorithmen. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Verändernde Algorithmen: transform, copy_if, replace“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Nicht verändernde Algorithmen: find, count, all_of
- Verändernde Algorithmen: transform, copy_if, replace
- Sortieren und Partitionieren: sort, stable_partition
- Numerische Algorithmen: accumulate, reduce, transform_reduce