如何为随机访问迭代器实现"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.

的索引
  1. 如果*thisend()迭代器,则return为假;
  2. 如果_Rightend()迭代器,则return为真;
  3. 在相反的情况下 return 比较结果。

并且有一个很好的想法来实现 end() 迭代器,该函数比较具有这种行为,没有任何特殊情况 (1-2)。

Michael Burr 的评论基本上是正确答案。

operator<(LeftIter,RightIter) 应该为真 当且仅当 存在严格正数 N 使得 LeftIter+N == RightIter.

对于位置P的元素,LeftIter就是container.begin()+P,所以确实有这样一个数N,就是container.size()-P,确实总是更大比 0.

如何实施取决于您,标准仅描述可见行为。