본문 바로가기
프로그래밍 기록/c++

함수 객체 dualinstance, Predicate, not2, IsMulti, bind2nd, ptr_fun, mem_fun

by hominic 2023. 12. 9.
728x90
반응형

dualinstance, 

#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
using namespace std;

void functor1(int a)
{
	printf("%d ",a);
};

struct functor2 {
	void operator()(double a) const { 
		printf("%f\n",a); 
	}
};

void main()
{
	int ari[]={1,2,3,4,5};
	vector<int> vi(&ari[0],&ari[5]);
	double ard[]={1.2,3.4,5.6,7.8,9,9};
	list<double> ld(&ard[0],&ard[5]);

	for_each(vi.begin(),vi.end(),functor1);
	cout << endl;
	for_each(ld.begin(),ld.end(),functor2());
}

 

 

Predicate

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

struct IsMulti3 : public unary_function<int,bool> {
	bool operator()(int a) const {
		return (a % 3 == 0);
	}
};

void main()
{
	int ari[]={1,2,3,4,5,6,7,8,9,10};
	vector<int> vi(&ari[0],&ari[10]);

	vector<int>::iterator it;
	for (it= vi.begin();;it++) {
		it=find_if(it, vi.end(), IsMulti3());
		if (it== vi.end()) break;
		cout << *it << "이(가) 있다" << endl;
	}
}

 

not2

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

struct compare : public binary_function<string,string,bool> {
	bool operator()(string a,string b) const {
		return stricmp(a.c_str(),b.c_str()) < 0;
	}
};

void main()
{
	string names[]={"STL","MFC","owl","html","pascal","Ada",
		"Delphi","C/C++","Python","basic"};
	vector<string> vs(&names[0],&names[10]);

	sort(vs.begin(),vs.end(),not2(compare()));
	vector<string>::iterator it;
	for (it=vs.begin();it!=vs.end();it++) {
		cout << *it << endl;
	}
}

IsMulti

반응형
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

struct IsMulti : public binary_function<int,int, bool> {
	bool operator()(int a,int b) const {
		return (a % b == 0);
	}
};

void main()
{
	IsMulti IM;
	if (IM(6,3)) { cout << "6은 3의 배수이다." << endl; }
	if (IM(9,2)) { cout << "9는 2의 배수이다." << endl; }
}

bind2nd 

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

struct IsMulti : public binary_function<int,int, bool> {
	bool operator()(int a,int b) const {
		return (a % b == 0);
	}
};

void main()
{
	int ari[]={1,2,3,4,5,6,7,8,9,10};
	vector<int> vi(&ari[0],&ari[10]);

	vector<int>::iterator it;
	for (it=vi.begin();;it++) {
		it=find_if(it, vi.end(), bind2nd(IsMulti(),3));
		if (it==vi.end()) break;
		cout << *it << "이(가) 있다" << endl;
	}
}

ptr_fun

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

bool IsMultiFunc(int a,int b)
{
	return (a % b == 0);
}

void main()
{
	int ari[]={1,2,3,4,5,6,7,8,9,10};
	vector<int> vi(&ari[0],&ari[10]);

	vector<int>::iterator it;
	for (it=vi.begin();;it++) {
		it=find_if(it, vi.end(), bind2nd(ptr_fun(IsMultiFunc),3));
		if (it==vi.end()) break;
		cout << *it << "이(가) 있다" << endl;
	}
}
728x90

mem_fun

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

class Natural
{
private:
	int num;

public:
	Natural(int anum) : num(anum) {
		SetNum(anum);
	}
	void SetNum(int anum) {
		if (anum >= 0) {
			num=anum;
		}
	}
	int GetNum() { return num; }
	bool IsEven() { return num % 2 == 0; }
};

void delnatural(Natural *pn) 
{ 
	delete pn; 
}

void main()
{
	vector<Natural *> vn;
	vn.push_back(new Natural(1));
	vn.push_back(new Natural(2));
	vn.push_back(new Natural(3));
	vn.push_back(new Natural(4));

	vector<Natural *>::iterator it;
	for (it=vn.begin();;it++) {
		it=find_if(it, vn.end(), mem_fun(&Natural::IsEven));
		if (it==vn.end()) break;
		cout << (*it)->GetNum() << "이(가) 있다" << endl;
	}
	for_each(vn.begin(),vn.end(),delnatural);
}
728x90
반응형

'프로그래밍 기록 > c++' 카테고리의 다른 글

c++ 표준 라이브러리 countwidth  (0) 2023.12.13
c++ 표준 라이브러리 coutradix  (0) 2023.12.13
함수 객체 for_each, functor, functormem, functorctor  (0) 2023.12.09
clamp  (0) 2023.12.08
binary_search  (1) 2023.12.08

댓글