Objek fungsi STL telah mengalami penambahbaikan besar, termasuk pemajuan dan pergerakan semantik yang sempurna dalam C++11, dan enkapsulasi penuding fungsi dan lambda generik dalam C++14. Penambahbaikan ini meningkatkan kebolehgunaan, kecekapan dan fleksibiliti; contohnya, lambda generik memudahkan penulisan objek fungsi pengisihan dengan hanya menggunakan std::less{} untuk mengisih secara menurun.
Peningkatan dalam objek fungsi STL dalam C++ 11 dan C++ 14
Semasa evolusi Perpustakaan Standard C++ (STL), objek fungsi telah menerima peningkatan yang ketara. Penambahbaikan ini direka bentuk untuk meningkatkan kebolehgunaan, kecekapan dan fleksibiliti.
Peningkatan dalam C++ 11
Contoh kod:
struct Forwarder { template <typename ...Args> void operator()(Args&&... args) const { std::forward<Args>(args)...; // 完美转发参数 } };
Contoh kod:
struct Mover { std::string value; Mover(Mover&& other) noexcept : value(std::move(other.value)) { other.value.clear(); // 移出旧值 } };
Penambahbaikan dalam C++ 14
Contoh kod:
auto plus = std::function<int(int, int)>([](int a, int b) { return a + b; });
Contoh kod:
auto sort_by = [](const auto& a, const auto& b) { return a < b; };
Kes praktikal
Andaikan terdapat struktur data gred pelajar, dan kini kita mahu menggunakan objek fungsi STL untuk mengisih gred.
C++ 11 kod:
std::vector<int> grades = {90, 85, 95, 88, 92}; std::sort(grades.begin(), grades.end(), [](int a, int b) { return a > b; }); // 降序排序
C++ 14 kod:
std::vector<int> grades = {90, 85, 95, 88, 92}; std::ranges::sort(grades, std::less{}); // 降序排序
Seperti yang anda lihat, lambda generik yang diperkenalkan dalam C++ 14 memudahkan menulis objek fungsi yang diisih.
Atas ialah kandungan terperinci Penambahbaikan kepada objek fungsi STL dalam C++ 11 dan C++ 14?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!