关于 C++ STL list 之迭代器
//list迭代器基类[部分代码]struct_List_iterator_base{_List_node_base*_M_node;booloperator==(con...
//list 迭代器基类[部分代码]
struct _List_iterator_base {
_List_node_base* _M_node;
bool operator==(const _List_iterator_base& __x) const {
return _M_node == __x._M_node;
}
bool operator!=(const _List_iterator_base& __x) const {
return _M_node != __x._M_node;
}
};
////list 迭代器类[部分代码]
template<class _Tp, class _Ref, class _Ptr>
struct _List_iterator : public _List_iterator_base {
reference operator*() const { return ((_Node*) _M_node)->_M_data; }
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
this->_M_incr();
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
this->_M_incr();
return __tmp;
}
_Self& operator--() {
this->_M_decr();
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
this->_M_decr();
return __tmp;
}
};
问:
为什么 比较操作符 == != 重载 的实现 放在 基类 _List_iterator_base
而不是和 -> * ++ -- 一样 放在 _List_iterator 当中
这是出于什么考虑?
谢谢!!! 展开
struct _List_iterator_base {
_List_node_base* _M_node;
bool operator==(const _List_iterator_base& __x) const {
return _M_node == __x._M_node;
}
bool operator!=(const _List_iterator_base& __x) const {
return _M_node != __x._M_node;
}
};
////list 迭代器类[部分代码]
template<class _Tp, class _Ref, class _Ptr>
struct _List_iterator : public _List_iterator_base {
reference operator*() const { return ((_Node*) _M_node)->_M_data; }
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
this->_M_incr();
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
this->_M_incr();
return __tmp;
}
_Self& operator--() {
this->_M_decr();
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
this->_M_decr();
return __tmp;
}
};
问:
为什么 比较操作符 == != 重载 的实现 放在 基类 _List_iterator_base
而不是和 -> * ++ -- 一样 放在 _List_iterator 当中
这是出于什么考虑?
谢谢!!! 展开
1个回答
展开全部
struct _List_iterator_base {
_List_node_base* _M_node;
bool operator==(const _List_iterator_base& __x) const {
return _M_node == __x._M_node;
}
bool operator!=(const _List_iterator_base& __x) const {
return _M_node != __x._M_node;
}
};
////list 迭代器类[部分代码]
template<class _Tp, class _Ref, class _Ptr>
struct _List_iterator : public _List_iterator_base {
reference operator*() const { return ((_Node*) _M_node)->_M_data; }
pointer operator->() const { return &(operator*()); }
_Self& operator++() {
this->_M_incr();
return *this;
}
_Self operator++(int) {
_Self __tmp = *this;
this->_M_incr();
return __tmp;
}
_Self& operator--() {
this->_M_decr();
return *this;
}
_Self operator--(int) {
_Self __tmp = *this;
this->_M_decr();
return __tmp;
}
};
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询