컨테이너마다 내부 구조가 다른데, 이 컨테이너들을 하나의 연산으로
묶어서 순회할 수 있게 하는 것이 반복자다.
반복자의 종류
임의 접근 반복자, 양방향 반복자, 순방향 반복자, 입력 반복자, 출력 반복자
1. 임의 접근 반복자
배열 기반 컨테이너들이 가지는 반복자
ex) ++, --, [], +=, -=
2. 양방향 반복자
노드 기반 컨테이너들이 가지는 반복자
ex) ++, --
이해를 돕기 위해 필자가 직접 구현해본 이중연결리스트로 구현한 리스트를 보자.
template<typename T>
class MyList
{
private:
template<typename T>
struct NODE
{
T m_data;
NODE* m_tNxt;
NODE* m_tBfr;
NODE()
:m_tNxt(nullptr), m_tBfr(nullptr){}
};
private:
template<typename T>
class MyListIterator
{
private:
NODE<T>* m_tCurr;
public:
MyListIterator(NODE<T>* _tHead = nullptr) { m_tCurr = _tHead; }
friend MyList;
public:
T& operator* ()
{
return m_tCurr->m_data;
}
MyListIterator<T>& operator++ ()
{
m_tCurr = m_tCurr->m_tNxt;
return *this;
}
MyListIterator<T>& operator-- ()
{
m_tCurr = m_tCurr->m_tBfr;
return *this;
}
MyListIterator<T> operator++ (int)
{
MyListIterator<T> tmp = *this;
operator++();
return tmp;
}
bool operator== (MyListIterator<T>& _iter)
{
return m_tCurr == _iter.m_tCurr;
}
bool operator!= (MyListIterator<T>& _iter)
{
return m_tCurr != _iter.m_tCurr;
}
};
public:
typedef MyListIterator<T> iterator;
iterator begin() { return iterator(m_tHead.m_tNxt); }
iterator end() { return iterator(); }
//생략
}
이런식으로 내부클래스로 구현되어 있다고 생각하면된다.
'C++' 카테고리의 다른 글
STL - map (0) | 2020.10.27 |
---|---|
STL - list (0) | 2020.10.27 |
STL - vector (0) | 2020.10.27 |
STL (0) | 2020.10.27 |
탬플릿 (0) | 2020.10.27 |