Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Возвращаемое значение std::for_each

Посмотрел реализацию std::for_each и стало жутко интересно, почему данная функция возвращает функцию, которую мы передаём в 3-ем параметре? Это как-то используется?


Ответ

Если в качестве третьего параметра вы используете функциональный объект, вы можете наделить этот функциональный объект внутренним состоянием и накапливать в нем какой-то интересующий вас результат. Затем, по завершении std::for_each, этот результат можно будет извлечь из возвращенной копии объекта.
Например
#include #include #include
struct S { int sum = 0; void operator()(int i) { sum += i; } };
int main(void) { int a[] = { 1, 2, 3, 4, 5 }; std::cout << std::for_each(std::begin(a), std::end(a), S()).sum << std::endl; }
Ситуацию также можно рассмотреть с точки зрения той же дизайн-идиомы, которая присутствует в классических С-функциях типа strcpy, т.е. передаваемое "насквозь" значение можно также использовать для более компактной (сцепленной) записи последовательных вызовов std::for_each с одним и тем же (с точки зрения значения) функциональным объектом
int main(void) { int a[] = { 1, 2, 3, 4, 5 }; int b[] = { 6, 7, 8, 9, 10 }; int c[] = { 11, 12, 13, 14, 15 };
std::cout << std::for_each(std::begin(c), std::end(c), std::for_each(std::begin(b), std::end(b), std::for_each(std::begin(a), std::end(a), S()))).sum << std::endl; }

Комментариев нет:

Отправить комментарий