如何为随机访问迭代器实现"less than operator"?
How to implement "less than operator" for random access iterator?
我正在实现自定义随机访问 stl 迭代器。 ATL-类 的包装器,如 CArray
。所以我有索引而不是指针。我的 end()
-Iterator 的索引为 -1。
正如我所见,here 必须实施像 "less than" 这样的比较运算符。
我的问题是;如果比较参数之一是 end()
-迭代器,结果应该是什么?它是定义的行为吗?
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.
的索引
- 如果
*this
是end()
迭代器,则return为假;
- 如果
_Right
是end()
迭代器,则return为真;
- 在相反的情况下 return 比较结果。
并且有一个很好的想法来实现 end()
迭代器,该函数比较具有这种行为,没有任何特殊情况 (1-2)。
Michael Burr 的评论基本上是正确答案。
operator<(LeftIter,RightIter)
应该为真 当且仅当 存在严格正数 N 使得 LeftIter+N == RightIter
.
对于位置P
的元素,LeftIter
就是container.begin()+P
,所以确实有这样一个数N,就是container.size()-P
,确实总是更大比 0.
如何实施取决于您,标准仅描述可见行为。
我正在实现自定义随机访问 stl 迭代器。 ATL-类 的包装器,如 CArray
。所以我有索引而不是指针。我的 end()
-Iterator 的索引为 -1。
正如我所见,here 必须实施像 "less than" 这样的比较运算符。
我的问题是;如果比较参数之一是 end()
-迭代器,结果应该是什么?它是定义的行为吗?
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.
- 如果
*this
是end()
迭代器,则return为假; - 如果
_Right
是end()
迭代器,则return为真; - 在相反的情况下 return 比较结果。
并且有一个很好的想法来实现 end()
迭代器,该函数比较具有这种行为,没有任何特殊情况 (1-2)。
Michael Burr 的评论基本上是正确答案。
operator<(LeftIter,RightIter)
应该为真 当且仅当 存在严格正数 N 使得 LeftIter+N == RightIter
.
对于位置P
的元素,LeftIter
就是container.begin()+P
,所以确实有这样一个数N,就是container.size()-P
,确实总是更大比 0.
如何实施取决于您,标准仅描述可见行为。