有效地將變數與多個值進行比較
在某些情況下,有必要同時將一個變數與多個選項進行比較。通常,開發人員會使用OR 運算符;
理想的解決方案
理想情況下,我們尋求一種方便的方法來區分多個組,如以下程式碼所示:
if (num = (1,2,3)) else if (num = (4,5,6)) else if (num = (7,8,9))
C 11解決方案使用std::initializer_list
在 C 11 中,可以使用 std::initializer_list 來實現所需的功能。透過定義is_in 模板函數,我們可以有效地將變數與一組選項進行比較:
#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); }
這使我們能夠簡潔地執行比較:
if (is_in(num, {1, 2, 3})) { DO STUFF }
C 17解決方案:更有效率
C 17引入了高度最佳化的解決方案,效果良好任何類型:
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)) // ...
與 C 11 版本不同,即使對於字串等複雜類型,該版本也能產生高效的程式碼。
以上是如何在 C 中有效地將變數與多個值進行比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!