Избегайте ответов, которые предлагают использовать find_if с предикатом с состоянием. Предикаты с состоянием опасны, поскольку алгоритмы STL предполагают, что копировать предикаты безопасно. В этом случае, если копии сделаны из предиката, тогда у каждого будет свой «промежуточный итог», и он не обязательно будет действовать на все значения или в правильном порядке.
Особенно избегайте решения, которое реализует член-предикат operator () как функцию-член const, но помечает его элементы как изменяемые, так как это вводит вас в заблуждение, что это не предикат с состоянием, что плохо.
Я бы предложил использовать либо один из ответов, который просто зацикливается, чтобы найти ответ, либо ответ, использующий аккумулятор, так как это наиболее правильный способ сделать это (даже если код выглядит немного громоздким.
Обратите внимание, что предупреждения могут не относиться к массивам C и find_if; Я просто не хочу, чтобы вы узнали, что предикаты с сохранением состояния являются правильным способом решения вашей проблемы, поскольку в конечном итоге вы можете использовать это неправильное решение в ситуации, когда это опасно в будущем.
Ссылка: Стандарты кодирования C ++: 101 Правила, руководящие указания и передовой опыт, пункт 87