Variablen effizient mit mehreren Werten vergleichen
In bestimmten Szenarien ist es notwendig, eine Variable gleichzeitig mit mehreren Optionen zu vergleichen. Typischerweise greifen Entwickler zum ODER-Operator; Dieser Ansatz führt jedoch häufig zu Komplikationen.
Die ideale Lösung
Im Idealfall suchen wir nach einer bequemen Methode zur Unterscheidung zwischen mehreren Gruppen, wie im folgenden Code veranschaulicht:
if (num = (1,2,3)) else if (num = (4,5,6)) else if (num = (7,8,9))
C 11-Lösung verwenden std::initializer_list
In C 11 kann std::initializer_list verwendet werden, um die gewünschte Funktionalität zu erreichen. Durch die Definition einer is_in-Vorlagenfunktion können wir eine Variable effizient mit einer Reihe von Optionen vergleichen:
#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); }
Dies ermöglicht uns, Vergleiche prägnant durchzuführen:
if (is_in(num, {1, 2, 3})) { DO STUFF }
C 17 Lösung: Effizienter
C 17 hat eine hochoptimierte Lösung eingeführt, die mit allen gut funktioniert Typ:
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)) // ...
Diese Version generiert im Gegensatz zum C 11-Gegenstück auch für komplexe Typen wie Zeichenfolgen effizienten Code.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Variable effizient mit mehreren Werten in C vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!