Comparer efficacement des variables à plusieurs valeurs
Dans certains scénarios, il devient nécessaire de comparer une variable à plusieurs options simultanément. En règle générale, les développeurs recherchent l'opérateur OR ; cependant, cette approche entraîne souvent des complications.
La solution idéale
Idéalement, nous recherchons une méthode pratique pour distinguer plusieurs groupes, comme en témoigne le code suivant :
if (num = (1,2,3)) else if (num = (4,5,6)) else if (num = (7,8,9))
Solution C 11 utilisant std::initializer_list
En C 11, std::initializer_list peut être utilisé pour obtenir la fonctionnalité souhaitée. En définissant une fonction de modèle is_in, nous pouvons comparer efficacement une variable à un ensemble d'options :
#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); }
Cela nous permet d'effectuer des comparaisons de manière succincte :
if (is_in(num, {1, 2, 3})) { DO STUFF }
C 17 Solution : Plus efficace
C 17 a introduit une solution hautement optimisée qui fonctionne bien avec n'importe quel type :
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)) // ...
Cette version génère du code efficace même pour les types complexes comme les chaînes, contrairement à son homologue C 11.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!