Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Pembolehubah Terhadap Pelbagai Nilai dengan Cekap dalam C?

Bagaimanakah Saya Boleh Membandingkan Pembolehubah Terhadap Pelbagai Nilai dengan Cekap dalam C?

Susan Sarandon
Susan Sarandonasal
2024-12-29 13:19:14813semak imbas

How Can I Efficiently Compare a Variable Against Multiple Values in C  ?

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&amp; 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 &amp;&amp;first, T &amp;&amp; ... 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!

Kenyataan:
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