Publish:

태그: , , ,

카테고리:

vector의 iterator 구현해보자!! (6)

end()

코드

1
2
3
4
5
6
7
8
9
// CArr 클래스 내부 , iterator 클래스 외부
public:
  iteraotr end()
// iterator 클래스 외부
template<typename T>
typename CArr<T>::iterator CArr<T>::end() // inner class 
{
    return iterator(m_pData, -1);
}

만약 iterator 의 m_iIdx 가 -1 이라면 end iterator 라고 생각해보자.

== , !=

begin() , end() 함수는 vector.begin() 혹은 vector.end() 와 같이 사용할 수 있는

vector 내부의 함수이다.

하지만 연산자의 경우 *iterator , iterator++ 등과 같이 사용할 수 있도록

iterator 내부에 구현이 필요하다.

따라서 iterator 내부에 모두 구현한다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
// iterator 클래스 내부
public:
  bool iterator == (const iterator& _other)
  {
    if(this->m_pData == _other.m_pData && this->m_iIdx == _other.m_iIdx)
      return true
    return false
  }
  bool iterator != (const iterator& _other)
  {
    return !(*this == _other);
  }

비교할 iterator 와 멤버변수가 모두 같다면 같은 것이다.

!= 연산자의 경우 위에서 구현한 == 연산자를 이용한다.

이제 테스트 해보자.

동작

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    CArr<string> V;
    V.push_back("one");
    CArr<string>::iterator iter = V.begin();

    cout << *iter << endl;
    if(iter == V.begin()) cout << "Begin" << endl;
    if(iter != V.end()) cout << "Begin" << endl;
    iter = V.end();
    if(iter != V.begin()) cout << "End" << endl;
    if(iter == V.end()) cout << "End" << endl;
    return 0;
}

실행시켜보면 잘 작동한다.

1

방문해 주셔서 감사합니다!😊

업데이트:

댓글남기기