質問

私はSTLをあまり使用しておらず、それを学び始めたいので、STLを使用して本当に簡単なプログラムを作成しました for_each 関数。ここにプログラム全体があります(ヘッダーファイルをマイナス):

class Object {
public:
    int s;

    Object() : s(0) { }

    Object(const Object& rhs) : s(rhs.s) { }

    void operator() (int a) {
        s += a;
    }
};

int main () {
    Object sum;
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

    cout << sum.s;

    cin.get();

    return 0;
}

プログラム出力 0. 。私は間違いなく使用しています for_each 間違っていますが、このコードの正確な問題は何ですか?

役に立ちましたか?

解決

for_each で動作します コピー あなたが提供するファンチャーの、そして最後にコピーを返します。あなたはこれを必要とします:

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);

他のヒント

合計を計算したい場合は、使用することもできます std::accumulate なので:

#include <numeric>

int sum =std::accumulate(arr, arr + sizeof(arr) / sizeof(int),0);

Functorの必要はありません!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top