Heim > Backend-Entwicklung > C++ > Verbesserungen an STL-Funktionsobjekten in C++ 11 und C++ 14?

Verbesserungen an STL-Funktionsobjekten in C++ 11 und C++ 14?

王林
Freigeben: 2024-04-25 22:06:01
Original
425 Leute haben es durchsucht

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.

C++ 11 和 C++ 14 中 STL 函数对象的改进?

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

  • Perfekte Weiterleitung: Perfekte Weiterleitung ermöglicht Funktionsobjekten das Empfangen und Weiterleiten von Funktionsargumenten ohne explizite Typkonvertierungen oder Kopien, wodurch die Effizienz verbessert wird.

Codebeispiel:

struct Forwarder {
  template <typename ...Args>
  void operator()(Args&&... args) const {
    std::forward<Args>(args)...; // 完美转发参数
  }
};
Nach dem Login kopieren
  • Move-Semantik: Move-Semantik ermöglicht es Funktionsobjekten, ihren internen Zustand zu verschieben, anstatt sie zu kopieren, was die Effizienz weiter verbessert.

Codebeispiele:

struct Mover {
  std::string value;

  Mover(Mover&& other) noexcept
    : value(std::move(other.value)) {
    other.value.clear(); // 移出旧值
  }
};
Nach dem Login kopieren

Verbesserungen in C++ 14

  • Funktionszeigerkapselung: C++ 14 führte den Typ std::function ein, der Funktionszeiger kapseln kann, was die Kapselung von Funktionen erleichtert Hinweise werden als Objekte verwendet.

Codebeispiel:

auto plus = std::function<int(int, int)>([](int a, int b) { return a + b; });
Nach dem Login kopieren
  • Generisches Lambda: Generisches Lambda ermöglicht es Ihnen, den Typ eines Lambda-Ausdrucks mithilfe von Vorlagen anzugeben, was Typsicherheit und Flexibilität bietet.

Codebeispiel:

auto sort_by = [](const auto& a, const auto& b) { return a < b; };
Nach dem Login kopieren

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; }); // 降序排序
Nach dem Login kopieren

C++ 14-Code:

std::vector<int> grades = {90, 85, 95, 88, 92};

std::ranges::sort(grades, std::less{}); // 降序排序
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage