回答
不可能。您可能需要步行至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