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 ?

Susan Sarandon
Libérer: 2024-12-29 13:19:14
original
791 Les gens l'ont consulté

How Can I Efficiently Compare a Variable Against Multiple Values in 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))
Copier après la connexion

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&amp; v, std::initializer_list<T> lst)
{
    return std::find(std::begin(lst), std::end(lst), v) != std::end(lst);
}
Copier après la connexion

Vous pouvez maintenant l'utiliser comme :

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

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 &amp;&amp;first, T &amp;&amp; ... t)
{
    return ((first == t) || ...);
}
Copier après la connexion

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!

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