#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
using namespace std;
template<typename type>
class Add{
private:
type number;
public:
Add(type initv) : number(initv){}
const type& operator()(type& elem) const
{
elem += number;
return elem;
}
};
int main()
{
list<int> coll;
for(int i = 0; i < 20; ++i)
{
coll.push_front(i);
coll.push_back(i);
}
transform( coll.begin(), coll.end(),
coll.begin(), Add<int>(10) );
copy( coll.begin(), coll.end(),
ostream_iterator<int>(cout, " "));
cout << endl;
for_each(coll.begin(), coll.end(), Add<int>(2));
copy( coll.begin(), coll.end(),
ostream_iterator<int>(cout, " "));
cout << endl;
cin.get();
return 0;
}