#include <iostream>
#include <vector>
#include <iterator>
#include <functional>
#include <algorithm>

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>

using namespace std;
using namespace boost::lambda;

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(), _1+_2);
	copy(v.begin(), v.end(), iout);
	cout<<endl;
	cin.get();
	return 0;
}
