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

标签 c++ iterator operator-keyword bidirectional

如何为双向迭代器定义运算符<? (列表::迭代器)

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

最佳答案

你不能直接这样做,但你可以计算 std::distance(x.begin(), it1)std::distance(x.begin(), it2) 并比较它们。鉴于列表没有随机访问,您预计必须通过遍历整个列表来为此类查询付出代价。


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

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

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

关于c++ - 如何为双向迭代器定义 operator<?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792522/

相关文章:

c++ - 如何使用 `requires` 和 `-> return_type` 声明成员函数

c++ - 如何从指针获取 vector 的大小

c++ - 使用具有同名方法的派生类的对象访问基类的方法

java - 使用 Java8 生成器的无限自然数序列

rust - 如何编写不拥有(或不消耗)迭代器所有权的函数? [复制]

c - "<"在表达式 j = i++ < 5 中的作用是什么?

c++ - 下标 [] 运算符的默认值?

C++ : Best practice when implementing Multiple inheritance

c++ - 输入迭代器的示例,其中 `end()` 实际上表示最后一次?

operator-keyword - 有没有带 "lateral"赋值运算符的语言?