


Bagaimana untuk mereka bentuk objek fungsi STL tersuai untuk meningkatkan kebolehgunaan semula kod?
Apr 25, 2024 pm 02:57 PMMenggunakan objek fungsi STL boleh meningkatkan kebolehgunaan semula, termasuk langkah-langkah berikut: Tentukan antara muka objek fungsi (buat kelas dan warisi daripada std::unary_function atau std::binary_function) Overload operator() untuk mentakrifkan kelakuan fungsi dalam operator terlampau beban( ) Gunakan objek fungsi melalui algoritma STL (seperti std::transform)
Gunakan objek fungsi STL untuk meningkatkan kebolehgunaan semula kod
Objek fungsi STL ialah kelas boleh panggil, yang Membolehkan menggabungkan pengaturcaraan berfungsi dengan pengaturcaraan berorientasikan objek . Dengan merangkum logik kod dalam objek fungsi, anda boleh meningkatkan kebolehgunaan semula dan enkapsulasi.
Langkah:
-
Tentukan antara muka objek fungsi: Buat kelas yang mewarisi daripada
std::unary_function
ataustd::binary_function
. Lebihkanoperator()
untuk menentukan tingkah laku fungsi. -
實(shí)現(xiàn)函數(shù)邏輯:在重載的
operator()
中,實(shí)現(xiàn)所需的功能。 -
使用函數(shù)對(duì)象:可以使用像
std::transform
或std::for_each
這樣的 STL 算法來應(yīng)用函數(shù)對(duì)象。
std::unary_function
或 std::binary_function
。重載 operator()
以定義函數(shù)行為。示例:
假設(shè)我們想要?jiǎng)?chuàng)建一個(gè)函數(shù)對(duì)象來計(jì)算字符串的長度:
class StringLength { public: int operator()(const std::string& str) { return str.length(); } }; int main() { std::vector<std::string> names = { "John", "Mary", "Bob" }; std::vector<int> lengths; std::transform(names.begin(), names.end(), std::back_inserter(lengths), StringLength()); for (int length : lengths) { std::cout << length << " "; // 輸出:4 4 3 } std::cout << "\n"; return 0; }
在這個(gè)例子中,StringLength
類是一個(gè)函數(shù)對(duì)象,實(shí)現(xiàn)了計(jì)算字符串長度的邏輯。我們通過 std::transform
將它應(yīng)用到字符串向量 names
上,將計(jì)算的長度存儲(chǔ)到 lengths
Dalam operator()
yang terlebih beban, laksanakan fungsi yang diperlukan.
std::transform
atau std::for_each
untuk menggunakan objek fungsi. ????Contoh: ??????Andaikan kita ingin mencipta objek fungsi untuk mengira panjang rentetan: ??rrreee??Dalam contoh ini, kelas StringLength
ialah fungsi Objek yang melaksanakan logik pengiraan panjang rentetan. Kami menggunakannya pada vektor rentetan nama
melalui std::transform
, menyimpan panjang yang dikira ke dalam vektor lengths
. ????Dengan menggunakan objek fungsi tersuai, kami boleh mencapai penggunaan semula kod dan menggunakan logik pengiraan panjang rentetan dengan mudah pada koleksi rentetan yang berbeza. ??Atas ialah kandungan terperinci Bagaimana untuk mereka bentuk objek fungsi STL tersuai untuk meningkatkan kebolehgunaan semula kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam C++, penunjuk fungsi boleh ditukar kepada objek fungsi melalui templat std::function: gunakan std::function untuk membalut penunjuk fungsi ke dalam objek fungsi. Gunakan fungsi ahli std::function::target untuk menukar objek fungsi kepada penunjuk fungsi. Transformasi ini berguna dalam senario seperti pengendalian acara, panggilan balik fungsi dan algoritma generik, memberikan lebih fleksibiliti dan kebolehgunaan semula kod.

Dalam C++, penutupan ialah ungkapan lambda yang boleh mengakses pembolehubah luaran. Untuk membuat penutupan, tangkap pembolehubah luar dalam ungkapan lambda. Penutupan memberikan kelebihan seperti kebolehgunaan semula, penyembunyian maklumat dan penilaian malas. Ia berguna dalam situasi dunia sebenar seperti pengendali acara, di mana penutupan masih boleh mengakses pembolehubah luar walaupun ia dimusnahkan.

Simbol, termasuk fungsi, pembolehubah dan kelas, dieksport dalam C++ melalui kata kunci "C" luaran. Simbol yang dieksport diekstrak dan digunakan mengikut peraturan bahasa C antara unit kompilasi atau apabila berinteraksi dengan bahasa lain.

boleh. C++ membenarkan definisi dan panggilan fungsi bersarang. Fungsi luaran boleh menentukan fungsi terbina dalam, dan fungsi dalaman boleh dipanggil terus dalam skop. Fungsi bersarang meningkatkan enkapsulasi, kebolehgunaan semula dan kawalan skop. Walau bagaimanapun, fungsi dalaman tidak boleh mengakses pembolehubah tempatan fungsi luaran secara langsung, dan jenis nilai pulangan mesti konsisten dengan pengisytiharan fungsi luaran Fungsi dalaman tidak boleh rekursif sendiri.

Melaksanakan pembanding tersuai boleh dicapai dengan mencipta kelas yang membebankan operator(), yang menerima dua parameter dan menunjukkan hasil perbandingan. Sebagai contoh, kelas StringLengthComparator mengisih rentetan dengan membandingkan panjangnya: Buat kelas dan operator beban lampau(), mengembalikan nilai Boolean yang menunjukkan hasil perbandingan. Menggunakan pembanding tersuai untuk mengisih dalam algoritma bekas. Pembanding tersuai membolehkan kami mengisih atau membandingkan data berdasarkan kriteria tersuai, walaupun kami perlu menggunakan kriteria perbandingan tersuai.

Ekspresi lambda C++ membawa kelebihan kepada pengaturcaraan berfungsi, termasuk: Kesederhanaan: Fungsi sebaris tanpa nama meningkatkan kebolehbacaan kod. Penggunaan semula kod: Ungkapan Lambda boleh dihantar atau disimpan untuk memudahkan penggunaan semula kod. Enkapsulasi: Menyediakan cara untuk merangkum sekeping kod tanpa mencipta fungsi berasingan. Kes praktikal: menapis nombor ganjil dalam senarai. Kira jumlah unsur dalam senarai. Ekspresi Lambda mencapai kesederhanaan, kebolehgunaan semula dan enkapsulasi pengaturcaraan berfungsi.

Kaedah untuk mengendalikan konflik cincang C++STL ialah: kaedah alamat rantai: menggunakan senarai terpaut untuk menyimpan elemen bercanggah, yang mempunyai kebolehgunaan yang baik. Kaedah pengalamatan terbuka: Cari lokasi yang tersedia dalam baldi untuk menyimpan elemen Sub-kaedah ialah: Pengesanan linear: Cari lokasi tersedia seterusnya dalam urutan. Pengesanan Kuadratik: Cari dengan melangkau kedudukan dalam bentuk kuadratik.

Amalan terbaik untuk pengubah suai akses untuk fungsi Java: Gunakan pengubah suai yang paling ketat, yang ditetapkan kepada peribadi secara lalai. Kelas dalaman menggunakan pengubah suai peribadi. Kaedah yang dilindungi menggunakan pengubah yang dilindungi untuk membenarkan akses oleh subkelas. Semua sifat dalam kelas tidak berubah ditetapkan kepada peribadi dan diakses melalui kaedah getter. API Awam menggunakan pengubah suai awam supaya ia boleh diakses oleh kelas luaran.
