簡體   English   中英

如何為雙向迭代器定義 operator<?

[英]How can I define operator< for bidirectional iterator?

如何為雙向迭代器定義 operator<? (列表::迭代器)

(我想使用列表而不是向量。)

你不能直接這樣做,但你可以計算std::distance(x.begin(), it1)std::distance(x.begin(), it2)並比較它們。 鑒於列表沒有隨機訪問,您希望通過遍歷整個列表來為這樣的查詢付出代價。


編輯:如果兩個迭代器都在列表的末尾附近,這將表現不佳。 如果你想更花哨,你可以編寫一些從兩個迭代器向外移動的探索算法:

[ .... <-- it1 --> .... <-- it2 --> .... ]

您基本上會為每個副本保留兩個副本fwd1 / rev1fwd2 / 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM