She*_*ohn 6 c++ iterator random-access
我正在为我的工作开发一个小型库,我从标准的随机访问迭代器类中派生了一些类.这允许我使用像迭代器特征这样的东西,并且当我使用标准库时不要太担心algorithm.当然我知道我不必,而且我可以选择双向类别,甚至可以实现我自己的类别.但这不是重点.
IMO,"差距"时,双向和随机存取类别之间是太大了,我不明白的减法和比较操作的必要性迭代器之间的 -那就是:a-b,a<b并且a>b(和宽松的变体).
为什么标准强制执行这些运算符,有人可以给我一个例子,其中(in)相等性测试,混合迭代器 - 标量算术(复合或非复合)运算符和偏移解引用运算符是不够的?
das*_*ght 12
在迭代器之间需要区别的一个常见情况是二进制搜索:在不知道距离的情况下,您不知道需要向左侧的迭代器添加多少才能到达中点O(1).一旦你知道了距离,就可以使用混合迭代器 - 标量算法来中间,也可以在恒定时间内.
请注意,您可以通过重复递增一个迭代器来找到距离,直到到达另一个迭代器,但这需要O(n)时间.
您还需要a < b比较以了解哪个迭代器在左侧,哪个在右侧.如果没有这种比较,您将无法验证二进制搜索算法的输入.
我觉得令人困惑的是,减法运算符应该返回一个int而不是一个迭代器,即使"逻辑上"我希望同一类型的两个对象之间的算术运算也返回该类型的对象.
减法为您提供距离 - 从一个点到另一个点的步数.这是一个标量数,与迭代器的类型无关.这里的对称性很简单:因为
iteratorA + scalar = iteratorB
Run Code Online (Sandbox Code Playgroud)
简单的算术规则告诉我们
scalar = iteratorB - iteratorA
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8332 次 |
| 最近记录: |