一般来说,两个STL容器迭代器之间的相等比较有什么性能成本呢?我只是在谈论已定义的操作;也就是说,比较指向同一对象的两个迭代器。
我的具体用例是我有一个std::map
,它可能有非常大的元素,很多元素,或者两者都有。如果我不知道两个迭代器之间的相等比较有隐藏的惩罚,它可能会影响我的代码性能。
一般来说,两个STL容器迭代器之间的相等比较有什么性能成本呢?我只是在谈论已定义的操作;也就是说,比较指向同一对象的两个迭代器。
我的具体用例是我有一个std::map
,它可能有非常大的元素,很多元素,或者两者都有。如果我不知道两个迭代器之间的相等比较有隐藏的惩罚,它可能会影响我的代码性能。
operator==()
只是原始指针比较,除非用于边界检查,否则毫无意义。而且,如果你比较来自不同容器的迭代器,这是未定义的行为。24.2.1 一般情况 [iterator.requirements.general]
8 所有迭代器类别仅需要对于给定类别可实现的函数以恒定时间(平摊)进行操作。因此,迭代器的要求表不具有复杂度列。
如果您查看迭代器操作的签名,没有与底层元素T
本身相对应的参数或返回类型,只需要T*
和T&
。甚至operator==
也不必直接比较两个任意大的元素T
本身。