Rumah > pembangunan bahagian belakang > C++ > Bagaimana Menggunakan Fungsi Ahli dengan Betul untuk Isih dalam C?

Bagaimana Menggunakan Fungsi Ahli dengan Betul untuk Isih dalam C?

Patricia Arquette
Lepaskan: 2024-12-08 22:17:14
asal
879 orang telah melayarinya

How to Correctly Use Member Functions for Sorting in C  ?

Fungsi Ahli Sebagai Perbandingan untuk Isih

Apabila menggunakan fungsi ahli sebagai kriteria perbandingan untuk menyusun, ralat penyusunan mungkin timbul disebabkan oleh sekatan yang dikenakan oleh piawaian ISO C. Piawaian ini melarang pengalamatan langsung fungsi ahli bukan statik yang tidak layak atau dalam kurungan untuk mendapatkan penunjuk kepada fungsi ahli. Ralat sedemikian boleh ditemui semasa cuba mengisih tatasusunan dalam kelas.

Untuk menyelesaikan isu ini, satu penyelesaian ialah mengisytiharkan fungsi perbandingan doCompare sebagai statik. Walau bagaimanapun, jika fungsi bergantung pada data daripada contoh MyClass, pendekatan alternatif adalah untuk mengubah kelas menjadi functor perbandingan. Ini melibatkan pengubahsuaian doCompare untuk melaksanakan fungsi operator() dan menggunakan std::sort seperti berikut:

doSort() { std::sort(arr,arr+someSize, *this); }
Salin selepas log masuk

Selain itu, nilai pulangan yang hilang dalam kaedah doSort patut dipertimbangkan. Untuk pelaksanaan yang lengkap, ia sepatutnya menyerupai:

int* doSort() { std::sort(arr,arr+someSize, &doCompare); return arr; }
Salin selepas log masuk

Sebagai alternatif, seseorang boleh menggunakan std::mem_fun dan mengikat untuk mengubah fungsi ahli menjadi fungsi percuma. Pilihan lain ialah membenamkan fungsi dalam kelas, seperti yang ditunjukkan dalam coretan berikut:

class MyClass {
   struct Less {
       Less(const MyClass& c) : myClass(c) {}
       bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} 
       MyClass& myClass;
   };
   doSort() { std::sort(arr,arr+someSize, Less(*this)); }
};
Salin selepas log masuk

Dengan memilih mana-mana pendekatan ini, pembangun boleh berjaya mengendalikan pengisihan tatasusunan dalam kelas menggunakan fungsi ahli sebagai kriteria perbandingan.

Atas ialah kandungan terperinci Bagaimana Menggunakan Fungsi Ahli dengan Betul untuk Isih dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan