2016-04-27 2 views
0

mir eine Funktion wie diese:Get Element bei Index von Iterator

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' ? 
} 

Kann ich jetzt das Element an middle_index ohne den Vektor selbst als Parameter übergeben?

+1

Beachten Sie, dass dies nur sicher ist, wenn 'it_start! = it_end'. –

Antwort

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; 
} 

oder einfach

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

oder

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

oder mit std::next:

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

Ich bezweifle, dass er 'it_start' voranbringen will. Und eine Erwähnung von 'std :: next' wäre auch gut. –

1

Mehr wiederverwendbare Lösung, die auch für Listen funktioniert (wenn Sie es Template-Funktion machen oder ändern Parameter zu std::list<T>::iterator) sieht so aus:

void func(vector<LatLng>::iterator it_start, 
      vector<LatLng>::iterator it_end) 
{ 
    auto &mid = *std::next(it_start, std::distance(it_start, it_end)/2); 
}