C ++ превращает векторный итератор в индекс
Вы можете сделать это так:
std::size_t index = std::distance(std::begin(my_vector), iterator);
Но прежде чем вы сможете получить индекс от итератора, вы сначаланужно иметь итератор. Пример итератора для вектора:
// iterator to i'th element
auto iterator = std::next(my_vector.begin(), i);
for (auto iterator : my_vector)
Простое присвоение имени переменному итератору не делает его итератором. Цикл на основе диапазона проходит над элементами контейнера. Элементами этого вектора являются кортежи, а не итераторы.
Канонический способ иметь индекс при итерации элементов вектора - использовать традиционный цикл индекса:
using my_vec_t = decltype(my_vector);
for (my_vec_t::size_type i = 0; i < my_vector.size(); i++)
Если вы действительно хотите иметь индекс в цикле диапазона, это возможно с помощью указателей:
auto* front = &my_vector.front();
for (auto& element : my_vector)
{
auto index = std::distance(front, &element);
}