JHB의 프로그래밍 삽질기

[C++ / STL] iterator는 포인터가 아닌데 포인터 처럼 쓴다. 본문

PROGRAMMING/Essay

[C++ / STL] iterator는 포인터가 아닌데 포인터 처럼 쓴다.

roter 2011.01.26 11:02

vector의 iterator를 사용 중

for(std::vector<CMyData*>::iterator it = vecData.begin() ; it != vecData.end(); it++)

(*it)->GetName();

이런게 있었다.

아무 생각 없이 쓰고보니.. it는 우선은.. 내가 선언한 std::vector<T*>::iterator 클래스의 인스턴스인데..
여기에 왜 역참조인 *가 붙었지?
<이 안에 든거> == *it인데..

아하 그럼 it는 <이 안에 든거>의 포인터겠구나~ 하고 생각했지만.. 포인터가 아니였다..(kering 왈)

마치 포인터 처럼 오버로딩 돼 있었다.

우선 *가 오버로딩 돼있다.
const_reference operator*() const

그외에 _Vb_const_iterator<_MycontTy>& operator++() 등등
vector 헤더에 있는 이것 저것 다 살펴보면 마치 포인터 처럼 보이도록 다 오버로딩이 돼있다.

즉 이터레이터는 마치 포인터인듯 사용하지만 이것은 포인터가 아니다.

참고로 vector의 iterator는 랜덤 액세스가 가능해서 + 나 - 등에도 다 오버로딩이 돼있지만, list의 경우는 아니랜다. (역시나 kering님 왈)

역시 C++의 세계는 심오해..
0 Comments
댓글쓰기 폼