Dopo C++ 11, nella libreria degli algoritmi abbiamo all_of
, any_of
and none_of
per determinare se un predicato vale per tutti, nessuno o nessuno degli elementi di un intervallo. Una singola chiamata a uno di questi algoritmi restituisce 1 bit di informazione, mentre per un determinato intervallo e predicato ci sono 4 possibilità:Determina se un predicato vale per nessuno, alcuni o tutti gli elementi di un intervallo
- Il predicato trattiene tutti gli elementi e senza elementi: l'intervallo è vuota;
- Il predicato vale su tutti gli elementi (e l'intervallo non è vuoto);
- Il predicato non contiene elementi (e l'intervallo non è vuoto);
- Il predicato vale per alcuni ma non per tutti gli elementi.
Esiste un modo sintetico ed efficace per trovare queste informazioni? Chiamare all_of
seguito da none_of
è una possibilità, ma (a) non riesce a funzionare su intervalli a passaggio singolo e (b) valuta il predicato esattamente una volta più del necessario. Boost sarebbe accettabile.
penso homebrew è l'unica opzione – sp2danny
È possibile implementare la propria funzione con due chiamate di 'find_first_of '(una volta con il predicato e una volta con la sua negazione). O un'idea alternativa: controlla il primo manualmente poi applica "all_of" o "none_of". – Csq
@Csq Ho già fatto una risposta con la prima opzione: puoi crearne una con la seconda. – Angew