Membandingkan Pembolehubah kepada Berbilang Nilai Dengan Cekap
Dalam senario tertentu, adalah perlu untuk membandingkan pembolehubah terhadap beberapa pilihan secara serentak. Biasanya, pembangun mencapai operator OR; namun, pendekatan ini selalunya membawa kepada komplikasi.
Penyelesaian Ideal
Sebaik-baiknya, kami mencari kaedah yang mudah untuk membezakan antara berbilang kumpulan, seperti yang ditunjukkan oleh kod berikut:
if (num = (1,2,3)) else if (num = (4,5,6)) else if (num = (7,8,9))
C 11 Penyelesaian Menggunakan std::initializer_list
Dalam C 11, std::initializer_list boleh digunakan untuk mencapai kefungsian yang diingini. Dengan mentakrifkan fungsi templat is_in, kita boleh membandingkan pembolehubah dengan set pilihan dengan cekap:
#include <algorithm> #include <initializer_list> template <typename T> bool is_in(const T& v, std::initializer_list<T> lst) { return std::find(std::begin(lst), std::end(lst), v) != std::end(lst); }
Ini membolehkan kami melakukan perbandingan secara ringkas:
if (is_in(num, {1, 2, 3})) { DO STUFF }
C 17 Penyelesaian: Lebih Cekap
C 17 memperkenalkan penyelesaian yang sangat dioptimumkan yang berfungsi dengan baik dengan mana-mana jenis:
template<typename First, typename ... T> bool is_in(First &&first, T && ... t) { return ((first == t) || ...); } // ... // s1, s2, s3, s4 are strings. if (is_in(s1, s2, s3, s4)) // ...
Versi ini menjana kod yang cekap walaupun untuk jenis kompleks seperti rentetan, tidak seperti rakan sejawat C 11.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Pembolehubah dengan Berbilang Nilai dengan Cekap dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!