[英]How can I define operator< for bidirectional iterator?
如何為雙向迭代器定義 operator<? (列表::迭代器)
(我想使用列表而不是向量。)
你不能直接這樣做,但你可以計算std::distance(x.begin(), it1)
和std::distance(x.begin(), it2)
並比較它們。 鑒於列表沒有隨機訪問,您希望通過遍歷整個列表來為這樣的查詢付出代價。
編輯:如果兩個迭代器都在列表的末尾附近,這將表現不佳。 如果你想更花哨,你可以編寫一些從兩個迭代器向外移動的探索算法:
[ .... <-- it1 --> .... <-- it2 --> .... ]
您基本上會為每個副本保留兩個副本fwd1
/ rev1
和fwd2
/ rev2
,然后遞減rev*
迭代器,直到您點擊x.begin()
並推進fwd*
迭代器,直到您點擊x.end()
。 如果您的迭代器對是均勻分布的,那么這可能具有更好的預期運行時間。
不可能的。 您可能需要一直走到end
,為此您需要知道原始list
,該列表未編碼在list::iterator
中。
(不過,您可以為此目的創建 function object ,它將list
或原點作為構造函數參數。請注意,找出一個迭代器是否小於另一個迭代器需要 O(n) 時間。)
您不能這樣做,因為您必須知道列表的開頭和/或結尾才能進行此類比較。 只有隨機訪問迭代器定義operator<
。
假設++(list.end())
不是未定義的行為並且等於list.end()
,有一種方法。 但我不確定這個假設。
如果有效,您可以定義一個簡單的算法來獲得您想要的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.