Maison >développement back-end >C++ >Comment puis-je comparer efficacement une variable à plusieurs valeurs en C ?
Comparer efficacement une variable à plusieurs valeurs
Souvent en programmation, il est nécessaire de vérifier si une variable correspond à l'une des plusieurs options. Ceci peut être réalisé par diverses méthodes, mais il est essentiel de donner la priorité à l'efficacité.
Méthodes inefficaces
Les tentatives de comparaison d'une variable à plusieurs valeurs à l'aide d'opérateurs logiques comme OR peuvent conduire à un code inefficace. Par exemple :
if (num == (1 || 2 || 3))
Cette approche évalue chaque expression logique (1 || 2, 2 || 3) séparément, ce qui peut entraîner un gaspillage de traitement.
Des solutions efficaces dans C 11
Une solution efficace en C 11 consiste à utiliser std::initializer_list. La fonction de modèle suivante prend une variable et une liste d'initialisation de correspondances potentielles :
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); }
Vous pouvez maintenant l'utiliser comme :
if (is_in(num, {1, 2, 3})) { DO STUFF }
Solution plus efficace en C 17
C 17 introduit une solution encore plus efficace qui fonctionne exceptionnellement bien avec n'importe quel tapez :
template<typename First, typename ... T> bool is_in(First &&first, T && ... t) { return ((first == t) || ...); }
Cette fonction de modèle utilise une transmission parfaite pour évaluer chaque comparaison efficacement, ce qui donne un code dont les performances sont comparables à celles des comparaisons écrites à la main.
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!