如何为双向迭代器定义operator <?

Már*_*ösi 2 c++ iterator bidirectional operator-keyword

如何为双向迭代器定义operator <?(list :: iterator)

(我想用list而不是vector.)

Ker*_* SB 7

你不能直接这样做,但你可以计算std::distance(x.begin(), it1)std::distance(x.begin(), it2)和比较的.鉴于列表没有随机访问权限,您必须通过遍历整个列表来支付此类查询的价格.


编辑:如果两个迭代器都接近列表的末尾,这将表现不佳.如果你想获得更多的花哨,你可以写一些探索算法从两个迭代器向外移动:

[ .... <-- it1 --> .... <-- it2 --> .... ]
Run Code Online (Sandbox Code Playgroud)

你基本上会为每个fwd1/ rev1fwd2/ 保留两个副本rev2,然后递减rev*迭代器,直到你点击x.begin()并推进fwd*迭代器直到你命中x.end().如果您的迭代器对是均匀分布的,那么这可能具有更好的预期运行时间.