从迭代器获取索引元素

时间:2016-04-27 20:53:15

标签: c++ vector 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' ?
}

现在我可以在middle_index获取元素而不将向量本身作为参数传递吗?

2 个答案:

答案 0 :(得分: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 :(得分: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);
}