Maison > développement back-end > C++ > Comment puis-je comparer efficacement une variable à plusieurs valeurs en C ?

Comment puis-je comparer efficacement une variable à plusieurs valeurs en C ?

Mary-Kate Olsen
Libérer: 2025-01-01 01:04:09
original
325 Les gens l'ont consulté

How Can I Efficiently Compare a Variable to Multiple Values in C  ?

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))
Copier après la connexion

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);
}
Copier après la connexion

Cela nous permet d'effectuer des comparaisons de manière succincte :

if (is_in(num, {1, 2, 3})) { DO STUFF }
Copier après la connexion

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)) // ...
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal