vector 구현해보기! (6)
태그: C++, Cpp, iterator, vector
카테고리: CppStudy
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;
}
실행시켜보면 잘 작동한다.
댓글남기기