#include <iostream>
#include <list>
#include <algorithm>
#include <functional>

using namespace std;

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);
//	Zoeken met behulp van een functie als zoekvoorwaarde.
	auto 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 lambda functie-object als zoekvoorwaarde.
	r=find_if(l.begin(), l.end(), [](int i) {
		return i>=0; 
	});
	if (r!=l.end())
		cout<<"Het eerste positieve element is: "<<*r<<endl;
	cin.get();
	return 0;
}
