for_eachで受け入れられる関数は、1つのパラメーター(ベクトルの要素)のみを受け取るため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 ++で同じことを行う方法はたくさんあるので、学ぶのは少し難しいです。しかし、それは興味深いです:)