Praktische Beispiele
Szenarien der Dereferenzierung von Iteratoren in der Praxis
graph TD
A[Praktische Beispiele] --> B[Datenfilterung]
A --> C[Transformation]
A --> D[Manipulation komplexer Objekte]
1. Filtern von Elementen in einem Vektor
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> zahlen = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> geradeZahlen;
// Filtern gerader Zahlen mithilfe von Iteratoren
std::copy_if(zahlen.begin(), zahlen.end(),
std::back_inserter(geradeZahlen),
[](int zahl) { return zahl % 2 == 0; });
// Ausgeben der gefilterten Zahlen
for (auto it = geradeZahlen.begin(); it != geradeZahlen.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> zahlen = {1, 2, 3, 4, 5};
// Transformation der Elemente (Multiplikation mit 2)
std::transform(zahlen.begin(), zahlen.end(),
zahlen.begin(),
[](int zahl) { return zahl * 2; });
// Ausgeben der transformierten Zahlen
for (auto it = zahlen.begin(); it != zahlen.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
3. Manipulation komplexer Objekte
#include <vector>
#include <iostream>
#include <string>
struct Student {
std::string name;
double note;
};
int main() {
std::vector<Student> studenten = {
{"Alice", 85.5},
{"Bob", 92.3},
{"Charlie", 78.1}
};
// Finden und Modifizieren eines bestimmten Studenten
auto it = std::find_if(studenten.begin(), studenten.end(),
[](const Student& s) { return s.name == "Bob"; });
if (it != studenten.end()) {
// Modifizieren der Note des Studenten
it->note = 95.0;
std::cout << "Aktualisierte Note: " << it->note << std::endl;
}
return 0;
}
Muster der Iterator-Verwendung
Muster |
Beschreibung |
Anwendungsfall |
Filtern |
Auswahl bestimmter Elemente |
Datenverarbeitung |
Transformation |
Modifizieren von Container-Elementen |
Datenmanipulation |
Suchen |
Finden bestimmter Elemente |
Datenabruf |
Modifikation |
Aktualisieren von Containerinhalten |
Dynamische Datenänderungen |
Erweiterte Iteratortechniken
Reverse Iteration
#include <vector>
#include <iostream>
int main() {
std::vector<int> zahlen = {1, 2, 3, 4, 5};
// Iteration in umgekehrter Reihenfolge
for (auto rit = zahlen.rbegin(); rit != zahlen.rend(); ++rit) {
std::cout << *rit << " ";
}
return 0;
}
Best Practices
- Verwenden Sie die passenden Iteratortypen.
- Nutzen Sie Funktionen der Algorithmus-Bibliothek.
- Beachten Sie die Ungültigkeit von Iteratoren.
- Verwenden Sie nach Möglichkeit Const-Iteratoren.
LabEx empfiehlt, diese praktischen Iteratortechniken zu beherrschen, um Ihre C++-Programmierkenntnisse zu verbessern und effizienteren Code zu schreiben.