티스토리 뷰


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++의 세계는 심오해..
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함