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?

王林
Lepaskan: 2024-04-25 22:06:01
asal
464 orang telah melayarinya

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)...; // 完美转发参数
  }
};
Salin selepas log masuk
  • 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(); // 移出旧值
  }
};
Salin selepas log masuk

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; });
Salin selepas log masuk
  • 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; };
Salin selepas log masuk

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; }); // 降序排序
Salin selepas log masuk

C++ 14 kod:

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

std::ranges::sort(grades, std::less{}); // 降序排序
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan