Вы уже получили несколько ответов, но я не могу согласиться ни с одним из них. Некоторые из них довольно близко подошли к цели, но не упомянули решающий момент (ИМО, конечно).
По крайней мере для меня, ключевой момент довольно прост: вы должны использовать стандартные алгоритмы, когда они помогают уточнить код , который вы пишете.
Это действительно так просто. В некоторых случаях то, что вы делаете, требует тайного вызова с использованием std::bind1st
и std::mem_fun_ref
(или что-то в этом порядке), которое является чрезвычайно плотным и непрозрачным, где цикл for
будет почти тривиально простым и простым. В таком случае, продолжайте и используйте цикл for
.
Если не существует стандартного алгоритма, который делает то, что вы хотите, позаботьтесь и посмотрите снова - вы часто упускаете то, что действительно будет делать то, что вы хотите (одно место, которое часто упускается: алгоритмы в <numeric>
часто полезны для нечислового использования). Посмотрев пару раз и подтвердив, что на самом деле не является стандартным алгоритмом, чтобы делать то, что вы хотите, вместо того, чтобы писать этот цикл for
(или что-то еще), подумайте о написании универсального алгоритма, чтобы тебе нужно сделать. Если вы используете его в одном месте, есть большая вероятность, что вы можете использовать его еще два или три, и в этот момент это может быть большой победой в ясности.
Написание универсальных алгоритмов не так уж сложно - на самом деле, зачастую это почти не требует дополнительной работы по сравнению с написанием встроенного цикла, поэтому даже если вы можете использовать его только дважды, вы уже сэкономите немного работы, даже если вы игнорируете улучшение читабельности и ясности кода.