【发布时间】:2017-10-15 05:40:17
【问题描述】:
我正在实现自定义随机访问 stl 迭代器。 ATL 类的包装器,例如 CArray。所以我有索引而不是指针。我的end()-Iterator 的索引为-1。
我看到here 必须实现“小于”之类的比较运算符。
我的问题是;如果比较参数之一是end()-Iterator,结果应该是什么?它是定义的行为吗?
VS2015这样实现vector_iterator;
bool operator<(const _Myiter& _Right) const
{ // test if this < _Right
_Compat(_Right);
return (_Ptr < _Right._Ptr);
}
但我不确定会发生什么,如果 _Right 或 *this 是 end()-Iterator。
编辑:end() 的索引为-1 的想法很糟糕。现在我使用容器大小作为end()-iterator 的索引。
【问题讨论】:
-
这真的取决于你的迭代器是如何实现的。没有代码,所以没有人能回答这个问题。
-
@ForEveR 但我问的是一种行为。是 end()
-
end()是一个迭代器,它“指向”容器的最后一个元素(因为迭代器是根据指针建模的,并且指向数组的常规指针必须允许指向超出容器末尾的值)数组以明确定义的方式),因此容器元素的任何有效迭代器都将小于该容器的end()迭代器。当比较两个都具有end()值的迭代器时,两者都不会小于另一个。简单地说,只要iter引用容器的元素,iter < end()就会为真。 -
以下划线开头后跟大写字母的名称(
_Myiter、_Right、_Compat、_Ptr)和包含两个连续下划线的名称保留供实现使用.不要在你的代码中使用它们。 -
哎呀,对不起;不小心阅读。你的帖子确实这么说。
标签: c++ stl iterator operator-overloading random-access