Bagaimanakah algoritma generik dalam C++ berfungsi semula?

王林
Lepaskan: 2024-06-05 19:41:00
asal
1122 orang telah melayarinya

Algoritma generik C++ boleh menggunakan semula operasi biasa, termasuk: algoritma pengisihan (seperti isihan) algoritma carian (seperti cari) operasi set (seperti set_difference) algoritma penukaran (seperti transformasi) Apabila menggunakan algoritma generik, anda perlu menyediakan bekas input dan bekas keluaran (pilihan) dan objek fungsi sebagai parameter. Sebagai contoh, algoritma isihan boleh digunakan untuk mengisih tatasusunan integer. Pembanding tersuai boleh digunakan untuk mengisih data mengikut peraturan tertentu. Dalam kes praktikal, algoritma std::max_element boleh digunakan untuk mencari nilai maksimum dalam bekas, meningkatkan kesederhanaan dan kebolehselenggaraan kod.

C++ 中的泛型算法是如何复用功能的?

C++ Generic Algorithm: Alat yang berkuasa untuk penggunaan semula kod

Pustaka standard C++ menyediakan algoritma generik yang berkuasa, membolehkan pengaturcara menggunakan semula operasi biasa dan mengelakkan masalah menulis kod berulang kali. Algoritma ini disediakan sebagai templat dan boleh digunakan pada pelbagai jenis data.

Kategori algoritma

Algoritma generik dalam perpustakaan standard boleh dibahagikan kepada beberapa kategori:

  • Isih algoritma (seperti isih dan stable_sort)) li> sortstable_sort
  • 搜索算法(例如 findbinary_search
  • 集合操作(例如 set_differenceset_intersection
  • 转换算法(例如 transformcopy)

使用方法

使用泛型算法很简单。只需传递一个输入容器、一个输出容器(如果需要)和一个 function 对象作为参数即可。

例如,以下代码使用 sort 算法对整数数组排序:

#include <algorithm>

int main() {
  int myArray[] = {4, 1, 3, 2};
  std::sort(std::begin(myArray), std::end(myArray));

  for (int i : myArray) {
    std::cout << i << " ";  // 输出:1 2 3 4
  }
}
Salin selepas log masuk

自定义比较器

对于需要根据自定义比较器进行排序的情况,可以使用泛型算法 std::sortComparator 参数。

例如,以下代码使用 lambda 表达式定义自定义比较器,以逆序排序数字:

#include <algorithm>

int main() {
  int myArray[] = {4, 1, 3, 2};
  std::sort(std::begin(myArray), std::end(myArray), [](int a, int b) { return a > b; });

  for (int i : myArray) {
    std::cout << i << " ";  // 输出:4 3 2 1
  }
}
Salin selepas log masuk

实战案例:查找最大值

假设我们有一个学生成绩列表,需要找出最大值。我们可以使用 std::max_elementAlgoritma carian (seperti cari dan binary_search)

Tetapkan operasi (seperti set_difference dan set_intersection< /code>) </li><p>Algoritma penukaran (seperti <code>transform dan copy)

🎜Penggunaan🎜🎜🎜Menggunakan algoritma generik ialah ringkas. Hanya hantar bekas input, bekas output (jika perlu) dan objek function sebagai argumen. 🎜🎜Sebagai contoh, kod berikut mengisih tatasusunan integer menggunakan algoritma isih: 🎜
#include <algorithm>
#include <vector>

int main() {
  std::vector<int> scores = {85, 90, 78, 95, 82};
  int maxScore = *std::max_element(scores.begin(), scores.end());
  std::cout << "最高分:" << maxScore;  // 输出:95
}
Salin selepas log masuk
🎜🎜Pembanding Tersuai🎜🎜🎜Untuk situasi di mana anda perlu mengisih berdasarkan pembanding tersuai, anda boleh menggunakan algoritma generikComparator code>std::sort. 🎜🎜Sebagai contoh, kod berikut menggunakan ungkapan lambda untuk mentakrifkan pembanding tersuai untuk mengisih nombor dalam susunan terbalik: 🎜rrreee🎜🎜Contoh Praktikal: Mencari Maksimum 🎜🎜🎜Andaikan kita mempunyai senarai gred pelajar dan perlu mencari maksimum. Kita boleh menggunakan algoritma std::max_element: 🎜rrreee🎜Dengan memanfaatkan algoritma generik, kita tidak perlu menulis fungsi maksimum find kita sendiri, tetapi boleh menggunakan semula kod daripada perpustakaan standard, yang meningkatkan kesederhanaan dan kebolehselenggaraan kod. 🎜

Atas ialah kandungan terperinci Bagaimanakah algoritma generik dalam C++ berfungsi semula?. 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