ページ 11

c++のクラスについて

Posted: 2013年1月06日(日) 17:21
by p p p
 クラス型配列の複数の要素にまたがる処理(例えば各要素のメンバごとに平均を求める)を行う場合は、どのようにするのが最も自然なのかを教えてください。お願いします。ちなみに今まではクラスの静的関数を自作して、そこで処理していました。

Re: c++のクラスについて

Posted: 2013年1月06日(日) 17:29
by beatle
「各要素のメンバごとに平均を求める」が良くわからないので的外れかもしれませんが、std::accumulateを使うのは如何でしょうか。

以下のコードは、配列xの全要素に対してget()を実行し、その戻り値の平均を求めます。

コード:

#include <iostream>
#include <algorithm>
#include <iterator>

class A {
    int x_;
public:
    A(int x) : x_(x) {}
    int get() const { return x_; }
};

int main()
{
    const int N = 3;
    A x[N] = { A(3), A(4), A(5) };
    double average = std::accumulate(std::begin(x), std::end(x), 0.0,
                [](double a, const A& b) { return a + b.get(); }) / N;
    std::cout << "average = " << average << std::endl;
    return 0;
}
C++には、配列の複数の要素に対して何かするという関数が沢山用意されていますので、それらを使い分けるのがいいのではと思います。
Algorithms library

Re: c++のクラスについて

Posted: 2013年1月06日(日) 18:48
by p p p
beatleさん、ソースコードまで添えて下さってありがとうございます。正にこれです。こんな面白そうなライブラリがあるとは目から鱗で、これからばんばん使っていきたいと思います。