Rumah >pembangunan bahagian belakang >C++ >Penambahbaikan kepada objek fungsi STL dalam C++ 11 dan C++ 14?

Penambahbaikan kepada objek fungsi STL dalam C++ 11 dan C++ 14?

王林
王林asal
2024-04-25 22:06:01421semak imbas

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.

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

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

  • Pemajuan sempurna: Pemajuan sempurna membolehkan objek fungsi menerima dan memajukan hujah fungsi tanpa penukaran atau salinan jenis eksplisit, meningkatkan kecekapan.

Contoh kod:

struct Forwarder {
  template <typename ...Args>
  void operator()(Args&&... args) const {
    std::forward<Args>(args)...; // 完美转发参数
  }
};
  • gerakkan semantik: gerakkan semantik membenarkan objek fungsi menggerakkan keadaan dalaman mereka dan bukannya menyalin, meningkatkan lagi kecekapan.

Contoh kod:

struct Mover {
  std::string value;

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

Penambahbaikan dalam C++ 14

  • Pengenkapsulan penunjuk fungsi: C++ 14:memperkenalkan fungsi mengensulati,mencapai fungsi yang lebih mudah s Petunjuk digunakan sebagai objek.

Contoh kod:

auto plus = std::function<int(int, int)>([](int a, int b) { return a + b; });
  • Lambda generik: Lambda generik membolehkan anda menentukan jenis ungkapan lambda menggunakan templat, memberikan keselamatan dan fleksibiliti jenis.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn