08.03

신승빈·2022년 8월 3일
0

KGCA 수업

목록 보기
18/128

알고리즘에 멤버 함수 전달

비멤버 함수

for_each(containerIteratorStart, containerIteratorEnd, funcName);

멤버함수 포인터

for_each(containerIteratorStart, containerIteratorEnd, mem_fun(&ClassName::funcName));

멤버함수 레퍼런스

for_each(containerIteratorStart, containerIteratorEnd, mem_fun_ref(&ClassName::funcName));
Reference : https://ifyouwanna.tistory.com/entry/memfun-%EC%99%80-memfunref-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%97%90-%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98-%EC%A0%84%EB%8B%AC

bind

bind1st

첫번째 매개변수를 고정, 두번째 매개변수 변경

bind2nd

첫번째 매개변수 변경, 두번째 매개변수 고정

void func(int a, int b)
{
	a < b;
}

==>>

void func(int a)
{
	a < 500;
}
reference : https://themangs.tistory.com/entry/STL-bind2nd-bind1st-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

참고

mem_fun은 this객체를 추가해줌
bind함수를 이용해 멤버함수에 고정적인 값을 매개변수로 넘길 수 있음

class Person {
private:
	std::string name;
public:
	void Show(int iData) const {
		std::cout << name << "[" << iData << "]"<<std::endl;
	}
};
void foo(const std::vector<Person>& coll)
{
	// 일반 템플릿 객체의 멤버함수 호출(인자값 없는)
	for_each(coll.begin(), coll.end(),mem_fun_ref(&Person::print));
	// 일반 템플릿 객체의 멤버함수 호출(인자값 있는)
	for_each(coll.begin(), coll.end(), bind2nd(mem_fun_ref(&Person::printWithPrefix),	"person: "));
}
int main()
{
	std::vector<Person> coll(5);
	// 전역함수 호출
	for_each(coll.begin(), coll.end(), GlobalFun);
	for_each(coll.begin(), coll.end(), std::bind2nd(std::mem_fun_ref(&Person::Show), 1));
	foo(coll);

    return 0;
}
profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글