使用迭代器进行索引

时间:2012-01-06 13:13:11

标签: c++

有没有办法可以获得迭代器的计数?

所以,如果一开始我有这个:

for (int i = 0; iter < agents.size(); ++i)
{
    agents[i]->Index(i);
}

请记住Index()设置一个整数,我将如何使用迭代器?

for (std::vector<Agent*>::iterator iter = agents.begin(); iter < agents.end(); ++iter)
{
    (*iter)->Index(????)
}

3 个答案:

答案 0 :(得分:6)

您想要distance http://www.cplusplus.com/reference/std/iterator/distance/

(*iter)->Index(distance(agents.begin(),iter));

答案 1 :(得分:2)

可以减去迭代器:

int distance = iter - agents.begin();

编辑:

仅适用于随机访问迭代器。 (+1互联网到Let_It_Be)

答案 2 :(得分:1)

大多数情况下,你总是可以自己解决问题:

{
    int i = 0;
    for (auto it = agents.begin(), end = agents.end(); it != end; ++it, ++i)
    {
         (*it)->set_int(i);
    }
}

如果您有随机访问迭代器,您确实可以安全地使用std::distance(agents.begin(), it),如前所述。