C++ 에서 STL을 사용할때 iterator를 어떻게 다른함수로 전달 할수 있나요?

이름에서도 알 수 있듯이 STL은 template들의 집합입니다. 적어주신 예에서도 템플릿 인자를 명시하지 않아 동작하는 코드는 아닌 것 같군요. 어쨌든 STL과 맞물려 돌아가는 유연한 프로그램을 작성하려면 역시 템플릿에 대하여 잘 알아야 합니다만, 일단 문의하신 내용에 대해서만 답변을 해보도록 하죠.

list<int> a; // int형을 저장하는 a라는 이름의 list container를 선언

list<int>::iterator j = a.begin();

set_my_value(j); // 이 코드를 제대로 동작하게 만들기 위한 함수 선언은,

void set_my_value(list<int>::iterator iter)
{
int my_value = *iter;
}

정도가 되겠습니다.

다만 저렇게 선언할 경우 반드시 list의 iterator만 받아들일 수 있다는 단점이 있죠. 제한적인 용도로 사용한다면 모르되 STL의 기본 설계 사상에 위배되는, 썩 좋은 코드는 아닙니다.

template <typename BidirectionalIterator> void set_my_value(BidirectionalIterator Iter)
{
BidirectionalIterator::value_type my_value = *iter;
}

정도로 템플릿을 이용하시면 좋을 것 같습니다. 템플릿 인자 이름을 BidirectionalIterator로 쓴 것은 양방향 반복자를 받는다는 뜻입니다. 반드시 그렇게 써야한다는 것은 아니고 그냥 알아보기 쉽도록.. 실제 VC++의 헤더를 보면 _FI, _LI따위로 되어있죠.

//-------------------------------------------------------------------
출처 : http://kin.naver.com/browse/db_detail.php?d1id=1&dir_id=10104&eid=fekGp0hHFfdD7oRx5anwkjc0u78CBU6s&ts=1094810932

by 로리시아 | 2005/07/29 11:10 | Close Dic | 트랙백 | 덧글(3)

트랙백 주소 : http://lolisia.egloos.com/tb/1590500
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 로리시아 at 2005/07/29 11:12
단, 많은 양의 코드를 일괄작업하지 않는 이상은, 사용하지 않는게 오히려 코드의 가독성을 높힙니다. (템플릿을 사용하는 것 자체가 매우 복잡하기 때문이죠.) - by Magicpotato
Commented by Saint at 2005/07/29 11:26
...갑자기 왠 외계어!!
Commented by 로리시아 at 2005/07/29 12:04
-_-군대 다녀와서도 까먹지 않게 다 적어두는거예요~♬

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶