>我有一个这样的函数:
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
的元素吗?
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);
更可重用的解决方案也适用于列表(如果您将其设置为模板函数或将参数更改为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);
}