#include <iostream>
#include <vector>
#include <iterator>
#include <functional>
#include <algorithm>

using namespace std;

int telop(int i, int j) {
	return i+j;
}

int main() {
	vector<int> v;
	v.push_back(-3);
	v.push_back(-4);
	v.push_back(3);
	v.push_back(4);
	vector<int> w;
	w.push_back(1);
	w.push_back(2);
	w.push_back(3);
	w.push_back(4);
	ostream_iterator<int> iout(cout, " ");
	copy(v.begin(), v.end(), iout);
	cout<<endl;
//	Bewerking opgeven met een functie.
	transform(v.begin(), v.end(), w.begin(), v.begin(), telop);
	copy(v.begin(), v.end(), iout);
	cout<<endl;
//	Bewerking opgeven met standaard functie-objecten.
	transform(v.begin(), v.end(), w.begin(), v.begin(), plus<int>());
	copy(v.begin(), v.end(), iout);
	cout<<endl;
//	Bewerking opgeven met boost lambda functie-objecten.
	transform(v.begin(), v.end(), w.begin(), v.begin(), [](int i1, int i2) {
		return i1 + i2;
	});
	copy(v.begin(), v.end(), iout);
	cout<<endl;
	cin.get();
	return 0;
}
