2016-04-27 5 views
0

У меня есть функция, как это:Получить элемент с индексом от итератора

void func(vector<LatLng>::iterator it_start, 
      vector<LatLng>::iterator it_end) 
{ 
    int middle_index = (it_end - it_start)/2; 
    // how can I now get the element at 'middle_index' ? 
} 

Могу ли я теперь получить элемент в middle_index без прохождения самого вектора в качестве параметра?

+1

Примечание. Это безопасно, только если 'it_start! = It_end'. –

ответ

4
void func(vector<LatLng>::iterator it_start, 
      vector<LatLng>::iterator it_end) 
{ 
    int middle_index = (it_end - it_start)/2; 
    std::advance(it_start, middle_index); 
    LatLng& mid = *it_start; 
} 

или просто

LatLng& mid = *std::advance(it_start, (it_end - it_start)/2); 

или

LatLng& mid = it_start[(it_end - it_start)/2]; 

или с помощью std::next:

LatLng& mid = *std::next(it_start, middle_index); 
+1

Я сомневаюсь, что он хочет продвинуть 'it_start'. И упоминание о 'std :: next' тоже было бы неплохо. –

1

Более многоразового решения, которое работает также для списков (если вы сделаете это функция шаблона или изменить параметр на std::list<T>::iterator) выглядит следующим образом:

Смежные вопросы