Objek Fungsi di Pustaka Standar C++
Objek fungsi, atau funktor, adalah jenis apa pun yang mengimplementasikan operator(). Operator ini disebut sebagai operator panggilan atau terkadang operator aplikasi. Pustaka Standar C++ menggunakan objek fungsi terutama sebagai kriteria pengurutan untuk kontainer dan dalam algoritma.
Objek fungsi memberikan dua keuntungan utama daripada panggilan fungsi lurus. Yang pertama adalah bahwa objek fungsi dapat berisi status. Yang kedua adalah bahwa objek fungsi adalah jenis dan oleh karena itu dapat digunakan sebagai parameter templat.
Membuat Objek Fungsi
Untuk membuat objek fungsi, buat operator jenis dan terapkan(), seperti:
class Functor
{
public:
int operator()(int a, int b)
{
return a < b;
}
};
int main()
{
Functor f;
int a = 5;
int b = 7;
int ans = f(a, b);
}
Baris main
terakhir fungsi menunjukkan cara Anda memanggil objek fungsi. Panggilan ini terlihat seperti panggilan ke fungsi, tetapi sebenarnya memanggil operator() dari jenis Functor. Kesamaan antara memanggil objek fungsi dan fungsi adalah bagaimana objek fungsi istilah muncul.
Objek fungsi dan Kontainer
Pustaka Standar C++ berisi beberapa objek fungsi dalam <functional>
file header. Salah satu penggunaan objek fungsi ini adalah sebagai kriteria pengurutan untuk kontainer. Misalnya, set
kontainer dinyatakan sebagai berikut:
template <class Key,
class Traits=less<Key>,
class Allocator=allocator<Key>>
class set
Argumen templat kedua adalah objek less
fungsi . Objek fungsi ini mengembalikan true
jika parameter pertama kurang dari parameter kedua. Karena beberapa kontainer mengurutkan elemennya, kontainer membutuhkan cara untuk membandingkan dua elemen. Perbandingan dilakukan dengan menggunakan objek fungsi. Anda dapat menentukan kriteria pengurutan Anda sendiri untuk kontainer dengan membuat objek fungsi dan menentukannya dalam daftar templat untuk kontainer.
Objek fungsi dan Algoritma
Penggunaan lain dari objek fungsional adalah dalam algoritma. Misalnya, remove_if
algoritma dinyatakan sebagai berikut:
template <class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator first,
ForwardIterator last,
Predicate pred);
Argumen terakhir adalah remove_if
objek fungsi yang mengembalikan nilai boolean ( predikat). Jika hasil objek fungsi adalah true
, maka elemen dihapus dari kontainer yang diakses oleh iterator first
dan last
. Anda dapat menggunakan salah satu objek fungsi yang dideklarasikan di <functional>
header untuk argumen pred
atau Anda dapat membuat objek anda sendiri.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk