Поскольку функция, принятая for_each , принимает только один параметр (элемент вектора), я должен определить где-то static int sum = 0
, чтобы к нему можно было получить доступ
после вызова for_each. Я думаю, что это неловко. Есть ли лучший способ сделать это (все еще использовать for_each)?
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
static int sum = 0;
void add_f(int i )
{
sum += i * i;
}
void test_using_for_each()
{
int arr[] = {1,2,3,4};
vector<int> a (arr ,arr + sizeof(arr)/sizeof(arr[0]));
for_each( a.begin(),a.end(), add_f);
cout << "sum of the square of the element is " << sum << endl;
}
В Ruby мы можем сделать это следующим образом:
sum = 0
[1,2,3,4].each { |i| sum += i*i} #local variable can be used in the callback function
puts sum #=> 30
Не могли бы вы показать больше примеров того, как for_each
обычно используется в практическом программировании (а не просто распечатывать каждый элемент)? Возможно ли использовать for_each
имитировать «шаблон программирования», такой как карта и ввод в Ruby (или карта / складывать в Haskell).
#map in ruby
>> [1,2,3,4].map {|i| i*i}
=> [1, 4, 9, 16]
#inject in ruby
[1, 4, 9, 16].inject(0) {|aac ,i| aac +=i} #=> 30
РЕДАКТИРОВАТЬ: Спасибо всем. Я так много узнал из твоих ответов. У нас так много способов сделать одну и ту же вещь в C ++, что немного усложняет изучение. Но это интересно:)