내 자신의 사용자 지정 벡터 클래스의 일부로 역 반복자를 쓰고 있습니다. 지금까지 내가 쓴 것은 다음과 같다.STL 컨테이너 반복자와 C 포인터 반복자의 차이점
class MyVector
{
public:
typedef T value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef pointer iterator;
typedef const_pointer const_iterator;
typedef size_t size_type;
class reverse_iterator
{
private:
iterator iter;
public:
inline reverse_iterator(iterator a=0) : iter(a) {}
inline reverse_iterator(const reverse_iterator& rev_iter) : iter(rev_iter.iter) {}
inline reverse_iterator& operator++()
{
--iter;
return *this;
}
// and remaining other operator functions
};
inline iterator begin (void) { return ((iterator)data_array); }
inline iterator end (void) { return ((iterator)data_array+number_of_elements); }
inline reverse_iterator rbegin(void) { return end()-1;}
inline reverse_iterator rend(void) { return begin()-1;}
//functions for myvector class
}; //end of Myvector class
위의 클래스 iterater는 C 스타일 포인터이고 reverse_iterator는 클래스입니다. 내가
main()
{
myVector<int> i;
myVector<int>::reverse_iterator rit= i.begin();
}
을 수행 할 때 그래서 내 reverse_iterator는() 기능을 시작하고 코드를 컴파일하고 실행 로 초기화된다. 그러나 STL의 iterator와 reverse_iterator의 경우에는 발생하지 않습니다. 이러한 초기화 작업을 방지합니다. 예 : reverse_iterator가 begin() 함수로 초기화되지 않도록하려면 rbegin()으로 초기화해야합니다.
그런 초기화를 피하려면 어떻게해야합니까? STL에있는 것과 같은 다른 반복기를 작성해야합니다. 그리고 나는 그것을 쓸 수 없다고 생각합니다. 제발 좀 해결책을주세요 ...
'iterator'를'reverse_iterator'로 명시 적으로 허용합니다. 왜냐하면 후자는 전자 메일에서 변환 생성자를 제공했기 때문입니다. 해당 생성자를 제거하십시오. – juanchopanza
코드 샘플을 [MCVE] (http://stackoverflow.com/help/mcve)로 줄이면 더 쉬울 것입니다.많은 코드가 문제와 관련이 없지만 컴파일하기에 충분하지 않습니다. – juanchopanza