Membandingkan Pembolehubah kepada Berbilang Nilai Dengan Cekap
Selalunya dalam pengaturcaraan, adalah perlu untuk menyemak sama ada pembolehubah sepadan dengan salah satu daripada beberapa pilihan. Ini boleh dicapai melalui pelbagai kaedah, tetapi penting untuk mengutamakan kecekapan.
Kaedah Tidak Cekap
Percubaan untuk membandingkan pembolehubah kepada berbilang nilai menggunakan operator logik seperti OR boleh membawa kepada kod yang tidak cekap. Contohnya:
if (num == (1 || 2 || 3))
Pendekatan ini menilai setiap ungkapan logik (1 || 2, 2 || 3) secara berasingan, yang boleh mengakibatkan pemprosesan terbuang.
Penyelesaian Cekap dalam C 11
Satu penyelesaian cekap dalam C 11 melibatkan penggunaan std::initializer_list. Fungsi templat berikut mengambil pembolehubah dan senarai pemula bagi kemungkinan padanan:
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); }
Kini anda boleh menggunakannya seperti:
if (is_in(num, {1, 2, 3})) { DO STUFF }
Penyelesaian Lebih Cekap dalam C 17
C 17 memperkenalkan penyelesaian yang lebih cekap yang berfungsi dengan baik dengan mana-mana jenis:
template<typename First, typename ... T> bool is_in(First &&first, T && ... t) { return ((first == t) || ...); }
Fungsi templat ini menggunakan pemajuan sempurna untuk menilai setiap perbandingan dengan cekap, menghasilkan kod yang berprestasi setanding dengan perbandingan tulisan tangan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Pembolehubah Terhadap Pelbagai Nilai dengan Cekap dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!