回答
不可能。您可能需要步行至end
,为此您需要知道list
的来源,这不是list::iterator
中的编码。
(尽管如此,您可以为此创建一个函数对象,它将list
或origin作为构造函数参数。请注意,查明一个迭代器是否少于另一个会花费O(n)次)。
你不能这样做,因为你必须知道列表的开始和/或结束,才能做出这样的比较。只有随机访问迭代器定义operator<
。
你不能直接做,但你可以计算std::distance(x.begin(), it1)
和std::distance(x.begin(), it2)
并比较这些。鉴于列表没有随机访问,您希望必须通过遍历整个列表来支付这样的查询的代价。
编辑:如果两个迭代器都靠近列表的末尾,这将表现不佳。如果你想获得更看中的,你可以写一些探索性的算法,从两个迭代器向外移动:
[ .... <-- it1 --> .... <-- it2 --> .... ]
你会基本保持两个副本的每个,fwd1
/rev1
和fwd2
/rev2
,你递减rev*
迭代器,直到您点击x.begin()
并提前迭代器fwd*
,直到您点击x.end()
。如果你的迭代器对是均匀分布的,这可能会有更好的预期运行时间。
假设++(list.end())
不是未定义的行为,等于list.end()
,有一种方法。但我不确定这个假设。
如果它是有效的,你可以定义一个简单的算法来获得你想要的结果。
不幸的是,这确实是未定义的行为。它确实发生在至少一个主要实现上,但这是您得到的最佳保证。 –
- 1. 为列表迭代器映射定义<运算符
- 2. 使用迭代器作为参数重载<<运算符
- 3. QHash迭代器示例 - 运算符<<不匹配?
- 4. 定义模板类,运算符和迭代器的麻烦
- 5. 自定义作业运算符和迭代器
- 6. 双向迭代器Next
- 7. 重载运算符<<用于打印自定义异常
- 8. noexcept运算符 - >()和运算符*()的迭代器?
- 9. 迭代器是否支持+运算符?
- 10. 迭代器和增量运算符
- 11. 范围运算符和迭代器
- 12. 如何使用迭代器重载增量运算符
- 13. 如何定义运算符= =
- 14. 清理双向迭代器代码
- 15. 如何定义运算符<<方法的结尾?
- 16. 如何定义静态运算符<<?
- 17. Bash双重定向(<< ==)的含义?
- 18. 运算符<<用于嵌套类
- 19. 超载运算符<<用于ostream
- 20. Haskell枚举器:类似于迭代`enumWith`运算符?
- 21. 如何比`运算符'更倾向于`运算符T()`转换?
- 22. 如何用std :: map获取双向迭代器的索引?
- 23. 迭代器引用然后“。”运营商与。 “ - >”运算符
- 24. C++双向迭代器前缀增量
- 25. 如何为随机访问迭代器实现“少于运算符”?
- 26. 在自定义迭代器类中重载`!=`运算符不能正常工作
- 27. 运算符&=对于元素矢量<bool>未定义?
- 28. 运算符<<在用户定义的方法
- 29. std :: setw整个运算符<<用户自定义类型
- 30. C++迭代器操作符定义
为什么你想使用列表而不是矢量? –
你为什么要将'operator <'应用于列表迭代器?什么是用例? –
这是'std :: list'还是你的一些自定义列表类? – leftaroundabout