2013-05-15 5 views
0

Iterator 클래스를 구현하는 동안 ->() 연산자에 오버로드 문제가 있습니다. 이 연산자는 어떻게 오버로드되어야합니까? 반복자 클래스 C에 대한 연산자 리디렉션 연산자

class iterator 
{ 
private: 
    pair<Key_t, Val_t> p; 

public: 
    iterator() 
    { 

    } 

    iterator(const iterator &i) 
    { 
     p = i.p; 
    } 

    iterator(Key_t key, Val_t v) 
    { 
     p = make_pair(key,v); 
    } 

    pair<const Key_t,Val_t>& operator *() const 
    { 
     return p; 
    } 

    iterator& operator = (const iterator &iter) 
    { 
     this->p = iter; 
     return *this; 
    } 
}; 

는 실패

&(pair<const Key_t,Val_t>&) operator ->() const 
    { 
     return &(**this); 
    } 
+2

일반적으로 '연산자 *()'와 동일합니다. –

+0

코드를 작성할 수 있습니까? 나는 반환 값으로 조금 붙어있다. – SAD

+0

일반적으로'& (operator *()) '로 – Yuushi

답변

0

이 모든 접근 방식이 잘못 보이는이 방법을 시도했다.

반복자

는 값을 포함 안된다 용기 내부 값 을 찾기 위해 필요한 최소한

  • 정보를 포함하기로했다.
  • 컨테이너 내의 다음 요소로 넘어가는 데 필요한 정보.

값을 반복기 내에 저장하면 불필요한 복사본이 생기고 컨테이너를 업데이트 할 수 없게됩니다 (값 변경, 컨테이너에서 요소 제거 등).

예를 들어, std::vector과 같은 컨테이너의 반복자는 컨테이너에 대한 핸들과 현재 항목에 대한 인덱스 (오프셋)를 저장할 수 있습니다.

반복자가 값을 가질 수있는 유일한 시간은 a generator that isn't actually associated with a container을 구현할 때입니다.

+0

고마워, 당신은 위대한 지적을했습니다. – SAD