[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