Les objets de fonction STL ont subi des améliorations majeures, notamment une sémantique de transfert et de déplacement parfaite en C++11, ainsi que l'encapsulation du pointeur de fonction et des lambdas génériques en C++14. Ces améliorations améliorent la convivialité, l'efficacité et la flexibilité ; par exemple, un lambda générique simplifie l'écriture des objets de fonction de tri en utilisant simplement std::less{} pour trier par ordre décroissant.
Améliorations des objets fonction STL en C++ 11 et C++ 14
Au cours de l'évolution de la bibliothèque standard C++ (STL), les objets fonction ont reçu des améliorations significatives. Ces améliorations sont conçues pour améliorer la convivialité, l’efficacité et la flexibilité.
Améliorations de C++ 11
Exemple de code :
struct Forwarder { template <typename ...Args> void operator()(Args&&... args) const { std::forward<Args>(args)...; // 完美转发参数 } };
Exemples de code :
struct Mover { std::string value; Mover(Mover&& other) noexcept : value(std::move(other.value)) { other.value.clear(); // 移出旧值 } };
Améliorations en C++ 14
Exemple de code :
auto plus = std::function<int(int, int)>([](int a, int b) { return a + b; });
Exemple de code :
auto sort_by = [](const auto& a, const auto& b) { return a < b; };
Cas pratique
Supposons qu'il existe une structure de données sur les notes des étudiants et que nous souhaitons maintenant utiliser des objets de fonction STL pour trier les notes.
Code C++ 11 :
std::vector<int> grades = {90, 85, 95, 88, 92}; std::sort(grades.begin(), grades.end(), [](int a, int b) { return a > b; }); // 降序排序
Code C++ 14 :
std::vector<int> grades = {90, 85, 95, 88, 92}; std::ranges::sort(grades, std::less{}); // 降序排序
Comme vous pouvez le voir, le lambda générique introduit en C++ 14 simplifie l'écriture d'objets fonction triés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!