Страницы

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

воскресенье, 1 декабря 2019 г.

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

#cpp


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


Ответы

Ответ 1



Если в качестве третьего параметра вы используете функциональный объект, вы можете наделить этот функциональный объект внутренним состоянием и накапливать в нем какой-то интересующий вас результат. Затем, по завершении 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; }

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

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