Поскольку s
, который вы передаете for_each
, является значением. for_each
принимает его по значению!
В C ++ 0x вы можете решить эту проблему с помощью for_each
as,
int sum = 0;
std::for_each(arr, arr+6, [&](int n){ sum += n; });
std::cout << sum ;
Выход:
15
Демонстрация на ideone: http://ideone.com/s7OOn
Или вы можете просто написать в самой std::cout
:
std::cout<<std::for_each(arr,arr+6,[&](int n)->int{sum += n;return sum;})(0);
Прогон: http://ideone.com/7Hyla
Обратите внимание, что такой различный синтаксис подходит для целей обучения, как работает std::for_each
и что он возвращает, но я бы не рекомендовал бы этот синтаксис в реальном коде. : -)
В C ++ вы можете написать пользовательскую функцию преобразования в функторе как
struct add
{
int total;
add():total(0){};
void operator()(int element) { total+=element; }
operator int() { return total ; }
};
int main()
{
int arr[] = {0, 1, 2, 3, 4, 5};
int sum = std::for_each(arr, arr+6, add());
std::cout << sum;
}
Это немного другая версия от второго решения Эрика: http://ideone.com/vKnmA