Heim >Backend-Entwicklung >C++ >Verbesserungen an STL-Funktionsobjekten in C++ 11 und C++ 14?
STL-Funktionsobjekte wurden erheblich verbessert, darunter perfekte Weiterleitungs- und Verschiebungssemantik in C++11 sowie Funktionszeigerkapselung und generische Lambdas in C++14. Diese Verbesserungen verbessern die Benutzerfreundlichkeit, Effizienz und Flexibilität; ein generisches Lambda vereinfacht beispielsweise das Schreiben von Sortierfunktionsobjekten, indem es einfach std::less{} zum absteigenden Sortieren verwendet.
Verbesserungen bei STL-Funktionsobjekten in C++ 11 und C++ 14
Während der Entwicklung der C++-Standardbibliothek (STL) haben Funktionsobjekte erhebliche Verbesserungen erfahren. Diese Verbesserungen sollen die Benutzerfreundlichkeit, Effizienz und Flexibilität verbessern.
Verbesserungen in C++ 11
Codebeispiel:
struct Forwarder { template <typename ...Args> void operator()(Args&&... args) const { std::forward<Args>(args)...; // 完美转发参数 } };
Codebeispiele:
struct Mover { std::string value; Mover(Mover&& other) noexcept : value(std::move(other.value)) { other.value.clear(); // 移出旧值 } };
Verbesserungen in C++ 14
Codebeispiel:
auto plus = std::function<int(int, int)>([](int a, int b) { return a + b; });
Codebeispiel:
auto sort_by = [](const auto& a, const auto& b) { return a < b; };
Praktischer Fall
Angenommen, es gibt eine Datenstruktur für Schülernoten und wir möchten nun STL-Funktionsobjekte verwenden, um die Noten zu sortieren.
C++ 11-Code:
std::vector<int> grades = {90, 85, 95, 88, 92}; std::sort(grades.begin(), grades.end(), [](int a, int b) { return a > b; }); // 降序排序
C++ 14-Code:
std::vector<int> grades = {90, 85, 95, 88, 92}; std::ranges::sort(grades, std::less{}); // 降序排序
Wie Sie sehen können, vereinfacht das in C++ 14 eingeführte generische Lambda das Schreiben sortierter Funktionsobjekte.
Das obige ist der detaillierte Inhalt vonVerbesserungen an STL-Funktionsobjekten in C++ 11 und C++ 14?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!