최근에 우리는 목록을 순회하는 STL 반복자에 관해 배웠습니다. 연결된리스트의 기본 반복자에 대한 예제 코드에서 나는 이해할 수없는 것을 발견했다.C++의 반복자 클래스 이해하기
우리는 2 개의 반복자 클래스, const_iterator와 iterator를 받았다. 이들은 모두 List 클래스의 하위 클래스였습니다. const_iterator에서 상속받은 iterator. 이터레이터의 생성자에서 왜 이렇게 작성되었는지는 잘 모르겠습니다.
반복자 클래스 :
class iterator:public const_iterator{
friend sortedList
protected:
iterator(Node* n):const_iterator(n){}
public:
iterator(){
n = nullptr;
}
const_iterator를 클래스 : 반복자가 const_iterator를 상속 않는 이유는 반복자의 생성자가 const_iterator를 용의 ctor를 초기화하고 자체에 아무것도하지 않고 왜
class const_iterator {
friend SortedList
protected:
Node* curr_;
const_iterator(Node* n){
curr_ = n;
}
public:
const_iterator(){
curr_ = nullptr;
}
내 질문입니다.
사이드 질문; iterator에서 curr_에 접근 할 때 어떻게 참조 할 것인가? 나는 curr_을 호출 할까 아니면 this-> curr_를 사용할 것인가? 반복자는 const_iterator를 상속 않는 이유는 반복자의 생성자가 const_iterator를 용의 ctor를 초기화하고 자체에 아무것도하지 않고 왜
표준 라이브러리 코드가 아닙니다. 이를 이해하기 위해, 우리는 당신이 요구하는 모든 구현을 더 많이 볼 필요가 있습니다. –
어쨌든'iterator'의 default-ctor가 깨졌습니다. – Deduplicator
const_iterator에서 상속하는 이유를 이해하는 데 도움이되는 https://stackoverflow.com/questions/2844466/can-iterator-type-just-subclass-constiterator를 살펴볼 수 있습니다. 개인적으로 IMO 공개 상속은 여기에 해당하지 않는 '공개'정보 (즉, 모델이 다형성로 사용될 객체에 대한 관계)를 전달하는 데 사용되어야하기 때문에 개인적으로이 방식을 좋아하지 않습니다. –