[완료]STL 관련 프로그래밍 질문입니다.
안녕하세요 STL을 공부하다가 막혀서 질문 드립니다..;; 아직 공부중이라 자세한 답변을 부탁드립니다.
---------------------------------쏘스--------------------------------------------------------------------------------
#include
#include
#include
#include
using namespace std;
struct IsKim
{
IsKim()
{
printf("ddddd");
}
bool operator()(string name) const
{
printf("예가 출력되나요?\n");
return(strncmp(name.c_str(),"김", 2)==0);
}
};
void main()
{
string names[] = {
"김유신", "이순신", "성삼문", "장보고", "조광조", "신숙주", "김흥도", "정도전", "이성계", "정몽주"
};
vector vs(&names[0], &names[10]);
vector::iterator it;
printf("****************************\n");
printf("****************************\n");
printf("****************************\n");
it = find_if( vs.begin(),
vs.end(),
IsKim());
//IsKim()();
printf("----------------------------\n");
printf("----------------------------\n");
printf("----------------------------\n");
printf("----------------------------\n");
if(it == vs.end())
cout<<"없다"<
else
cout<<*it<<"이(가)있다"<
}
----------------------------------------------------------------------------------------------------------------
출력 결과
******************************
******************************
******************************
ddddd 예가 출력되나요?
-------------------------------
-------------------------------
-------------------------------
김유신이<가>있다.
질문 >>>
it = find_if( vs.begin(),vs.end(),IsKim());
이부분에서 IsKim()의 임시객체를 생성해서 넘겨 주었는데
생성자 호출은 당연하지만..;; 왜 operator()() 함수까지 호출이 되어 지는지 이해가 잘안가서
이부분에 관하여 해를 구하고자 올렸습니다.ㅜㅜ
그리고 이러한것을 보시고 지금 제가 어느부분이 약한지 지적해주시면 다시 기초서적을 정독 하도록 하겠습니다. !!!
개발자님들의 답변들을 구합니다~ ㅠㅠ
find_if(
find_if( vs.begin(),vs.end(),IsKim());
라는 문장에서 IsKim()는 IsKim을 생성하는 표현이고
그게 함수의 인자로 넘어가면
함수안에서 operator()를 호출합니다. (함수 안에서 당연히 그런 내용으로 되어 있겠죠? ^^ )
???
위의 글쓴이께서 IsKim()은 IsKim을 생성하는 표현이라 하셨는데 이게 정확이 임시 객체를 생성한다는 것인가요??
그러면 객체 생성은 생성자를 동반하고 거기서 printf(); 호출후 끝나는 구조 인데 ;;
어떻게 opeator() 이라는 함수 가 호출댄다고 하시는 것인지;;
조금더 자세한 설명 부탁드리겠습니다. ;;;
it = find_if(
이 부분을 이런식으로 풀어서 보면 이해가 쉬울까요?
처음 코드와 아래의 코드의 차이점은 위는 이름없는 임시 객체가 만들어져서(IsKim())
함수로 넘어가고 아래는 kkk라는 이름의 객체를 만들어서 함수로 넘긴 것입니다.
그리고 find_if는 다음을 보면 "pred(...)"로 IsKim의 "operator()"함수를 호출하고 있습니다.
http://www.cplusplus.com/reference/algorithm/find_if/
감사합니다~
감사합니다.~ 많은 도움이 되었습니다~~ ^^*
댓글 달기