1

私は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間違って使用していますが、このコードの何が正確に間違っていますか?

4

2 に答える 2

4

for_each指定したファンクターのコピーを処理し、最後にコピーを返します。あなたはこれを必要とします:

sum = for_each(arr, arr + sizeof(arr) / sizeof(int), sum);
于 2011-04-30T18:47:37.810 に答える
3

合計を計算したいだけの場合は、次のように使用することもできますstd::accumulate

#include <numeric>

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

ファンクターは必要ありません!

于 2011-04-30T18:50:30.207 に答える