2016-04-27 20 views

答えて

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)は次のようになります。

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); 
} 
関連する問題