[c++] 什么是获得std :: vector迭代器索引的最有效方法?


Answers

我更喜欢std::distance(vec.begin(), it)因为它可以让我在没有任何代码更改的情况下更改容器。 例如,如果你决定使用std::list而不是std::vector ,它不提供随机访问迭代器,你的代码仍然会编译。 由于std :: distance根据迭代器特征挑选最佳方法,因此不会有任何性能下降。

Question

我遍历一个向量并需要迭代器当前指向的索引。 AFAIK这可以通过两种方式完成:

  • it - vec.begin()
  • std::distance(vec.begin(), it)

这些方法的优点和缺点是什么?




根据http://www.cplusplus.com/reference/std/iterator/distance/ ,由于vec.begin()是一个随机访问迭代器,距离方法使用-运算符。

所以答案是,从性能角度来看,它是相同的,但如果有人需要阅读和理解你的代码,使用distance()会更容易理解。




我喜欢这个: it - vec.begin() ,因为对我来说它清楚地表明“距离开始”。 使用我们习惯用算术思考的迭代器,所以符号是最明确的指标。




Related