#include <iostream>
#include <list>
#include <algorithm>
#include <functional>

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>

using namespace std;
using namespace boost::lambda;

bool ispos(int i) {
	return i>=0;
}

class IsPos {
public:
	bool operator()(int i) const {
		return i>=0;
	}
};

int main() {
	list<int> l;
	l.push_back(-3);
	l.push_back(-4);
	l.push_back(3);
	l.push_back(4);
	list<int>::iterator r;
//	Zoeken met behulp van een functie als zoekvoorwaarde.
	r=find_if(l.begin(), l.end(), ispos);
	if (r!=l.end())
		cout<<"Het eerste positieve element is: "<<*r<<endl;
//	Zoeken met behulp van een functie-object als zoekvoorwaarde.
	r=find_if(l.begin(), l.end(), IsPos());
	if (r!=l.end())
		cout<<"Het eerste positieve element is: "<<*r<<endl;
//	Zoeken met behulp van een standaard functie-object als zoekvoorwaarde.
	r=find_if(l.begin(), l.end(), bind2nd(greater_equal<int>(),0));
	if (r!=l.end())
		cout<<"Het eerste positieve element is: "<<*r<<endl;
//	Zoeken met behulp van een boost lambda functie-object als zoekvoorwaarde.
	r=find_if(l.begin(), l.end(), _1>0);
	if (r!=l.end())
		cout<<"Het eerste positieve element is: "<<*r<<endl;
	cin.get();
	return 0;
}
