要素のコンテナーがあり、各要素にはsize()
メンバー関数があります。二項演算を記述して、コンテナー要素の合計サイズを累積することができましたadd_size
。
#include <algorithm>
#include <vector>
#include <functional>
#include <numeric>
#include <iostream>
class A
{
int size_ ;
public:
A ()
:
size_(0)
{}
A (int size)
:
size_(size)
{}
int size() const
{
return size_;
}
};
template<typename Type>
class add_element
{
Type t_;
public:
add_element(Type const & t)
:
t_(t)
{}
void operator()(Type & t)
{
t += t_;
}
};
int add_size (int i, const A& a)
{
return i+=a.size();
}
using namespace std;
int main(int argc, const char *argv[])
{
typedef vector<A> Vector;
Vector v;
v.push_back(A(10));
v.push_back(A(5));
v.push_back(A(7));
v.push_back(A(21));
v.push_back(A(2));
v.push_back(A(1));
int totalSize = accumulate(v.begin(), v.end(), 0, add_size);
std::cout << totalSize << endl;
return 0;
}
これにより、正しい出力が得られます。
46
私が望むのは、サイズ メンバー関数のためだけに二項演算を定義せずに、mem_fun とバインダーを使用してそれを行うことです。add_size
どうやってやるの?どうすれば効果的にそれを行うことができますか? 私はから始めてadd_element
行き詰まりました。
C++03 で動作するソリューションが必要です。