Bagaimana untuk melanjutkan algoritma STL menggunakan objek fungsi C++?

PHPz
Lepaskan: 2024-04-25 22:18:02
asal
485 orang telah melayarinya

Algoritma STL boleh dilanjutkan dengan menggunakan objek fungsi, iaitu kelas atau struktur dengan operator panggilan (operator()). Anda hanya perlu menghantar objek fungsi sebagai parameter algoritma Contohnya, apabila menggunakan algoritma std::sort untuk mengisih bekas, anda boleh lulus objek fungsi std::greater<> Objek fungsi membolehkan kami menyesuaikan algoritma STL untuk mencapai keperluan yang lebih fleksibel, seperti menyesuaikan fungsi penjumlahan untuk menggunakan fungsi eksponen kepada jumlah elemen Menggunakan objek fungsi ExpSum, kami boleh menukar 1^2 + 2^2 + 3^2 + 4 Hasil daripada ^2 (30) dihantar ke algoritma std::accumulate untuk pengumpulan.

如何使用 C++ 函数对象扩展 STL 算法?

Bagaimana untuk melanjutkan algoritma STL menggunakan objek fungsi C++?

Pustaka Templat Standard (STL) C++ menyediakan banyak algoritma berkuasa untuk memanipulasi pengumpulan data dengan mudah dan cekap. Walau bagaimanapun, kadangkala kami perlu menyesuaikan algoritma ini untuk memenuhi keperluan khusus kami. Objek fungsi C++ membolehkan kami memanjangkan algoritma STL dengan mudah untuk mencapai penyesuaian ini.

Objek Fungsi

Objek fungsi ialah kelas atau struktur yang mempunyai operator panggilan (operator()). Dengan memanggil objek fungsi, anda boleh melakukan beberapa operasi seperti memanggil fungsi biasa. operator()) 的类或结构。通过调用函数对象,可以像调用普通函数一样执行一些操作。

扩展 STL 算法

  • 使用函数对象扩展 STL 算法非常简单,只需将函数对象作为算法的参数之一传递即可。
  • 例如,要使用自定义比较函数对容器进行排序,我们可以使用 std::sort 算法并传递 std::greater<> 函数对象作为比较函数。
std::vector<int> vec = {3, 1, 2, 4};
std::sort(vec.begin(), vec.end(), std::greater<>{});
Salin selepas log masuk
  • 输出:[4, 3, 2, 1]

实战案例:自定义求和函数

以下实战案例展示了如何使用函数对象自定义 std::accumulate

Melanjutkan algoritma STL

🎜
  • Melanjutkan algoritma STL menggunakan objek fungsi adalah sangat mudah, hanya lulus objek fungsi sebagai salah satu parameter algoritma.
  • Sebagai contoh, untuk mengisih bekas menggunakan fungsi perbandingan tersuai, kita boleh menggunakan algoritma std::sort dan lulus std::greater<> Fungsi objek sebagai fungsi perbandingan.
struct ExpSum {
    int operator()(int a, int b) const {
        return a + std::pow(b, 2);
    }
};

int main() {
    std::vector<int> vec = {1, 2, 3, 4};
    int sum = std::accumulate(vec.begin(), vec.end(), 0, ExpSum{});
    std::cout << sum << std::endl;  // 输出:30(1^2 + 2^2 + 3^2 + 4^2)
}
Salin selepas log masuk
  • Output: [4, 3, 2, 1]
🎜🎜Kes praktikal: Fungsi penjumlahan tersuai 🎜 🎜🎜Contoh praktikal berikut menunjukkan cara menggunakan objek fungsi untuk menyesuaikan algoritma std::accumulate untuk mengira jumlah elemen dalam bekas dan menggunakan fungsi eksponen: 🎜rrreee🎜Dengan kaedah ini, kami boleh Mengintegrasikan logik tersuai ke dalam algoritma STL untuk meningkatkan fleksibiliti dan memenuhi keperluan khusus kami. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melanjutkan algoritma STL menggunakan objek fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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