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

Bagaimanakah Saya Boleh Membandingkan Pembolehubah dengan Berbilang Nilai dengan Cekap dalam C?

Mary-Kate Olsen
Lepaskan: 2025-01-01 01:04:09
asal
325 orang telah melayarinya

How Can I Efficiently Compare a Variable to Multiple Values in 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))
Salin selepas log masuk

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);
}
Salin selepas log masuk

Ini membolehkan kami melakukan perbandingan secara ringkas:

if (is_in(num, {1, 2, 3})) { DO STUFF }
Salin selepas log masuk

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)) // ...
Salin selepas log masuk

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!

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