#include <algorithm>
#include <iostream>
#include <vector>
using std::vector,
std::transform,
std::cerr;
#define TRANSFORM_1
class Temp{
public:
int a, b;
Temp(int i, int j):a(i), b(j){}
};
bool operator==(const Temp& l, const Temp& r)
{
return l.a == r.a && l.b == r.b;
}
typedef vector<Temp> my_vector;
int main(){
my_vector a = {Temp(0, 0), Temp(1, 1), Temp(2, 4), Temp(3, 9)};
my_vector b = {Temp(2, 4), Temp(17, 289), Temp(18, 324), Temp(19, 361)};
auto print = [] (Temp t){
cerr << "Temp(" << t.a << ", " << t.b << ")\n";
};
cerr << "a before transform:\n";
for_each(a.begin(), a.end(), print);
cerr << "b before transform:\n";
for_each(b.begin(), b.end(), print);
cerr << "\n";
#ifdef TRANSFORM_1
auto test = [] (Temp t)->Temp{
t.a *= 4;
t.b += 2;
return t;
};
transform(a.begin(), a.end(), b.begin(), test);
cerr << "a after TRANSFORM_1:\n";
for_each(a.begin(), a.end(), print);
cerr << "b after TRANSFORM_1:\n";
for_each(b.begin(), b.end(), print);
cerr << "\n";
#else
auto binary_test = [] (Temp &t, Temp &u)->Temp{
t.a *= 4;
t.b += 2;
u.a *=2;
u.b += 5;
return t;
};
my_vector c = {Temp(2, 4), Temp(17, 289), Temp(18, 324), Temp(19, 361)};
transform(a.begin(), a.end(), b.begin(), c.begin(), binary_test);
cerr << "a after transform 2:\n";
for_each(a.begin(), a.end(), print);
cerr << "b after transform 2:\n";
for_each(b.begin(), b.end(), print);
cerr << "c after transform 2:\n";
for_each(c.begin(), c.end(), print);
#endif
return 0;
}
C++ Examples© 2024 TBD