34 votes

Std :: any_of est-il requis pour suivre la logique de court-circuit?

Étant donné le code suivant,

 std::vector<int> numbers = {1, 2, 3, 4, 5};
std::any_of(std::begin(numbers), std::end(numbers), 
            [](int number) { return number > 3; } );
 

std :: any_of est-il obligé (par la norme) de revenir dès qu'il atteint 4?

36voto

StoryTeller Points 6139

La norme elle-même ne place pas de telles dur exigence. Mais on peut en déduire qu'il est indirectement encouragé ([alg.any_of]):

template <class InputIterator, class Predicate>
  bool any_of(InputIterator first, InputIterator last, Predicate pred);
template <class ExecutionPolicy, class ForwardIterator, class Predicate>
  bool any_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
              Predicate pred);

Retournefalse si [first, last) est vide ou si il n'y a pas de itérateur i dans l'intervalle [first, last) tels que pred(*i) est vrai, et vrai sinon.

Complexité: Au plus dernier - premières applications du prédicat.

Tout est parfaitement conforme de la mise en œuvre peut s'appliquer le prédicat exactement last-first temps de, la formulation me semble que cela pourrait être encouragés à quitter dès que possible.

Notez qu'il est pratiquement impossible de demander la même chose de la surcharge qui accepte un ExecutionPolicy. Depuis lors, l'ordre d'évaluation n'est pas connue.

Dans un registre moins formel remarque, toute la mise en œuvre de la version séquentielle qui ne veut pas quitter le moment le prédicat est vrai, met les informations d'identification de son auteur en question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X