Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Pembolehubah dengan Berbilang Nilai dengan Cekap dalam C?
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!