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
360 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!

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