C++ 用迭代器索引
有没有办法得到迭代器的计数 所以如果一开始我有这个:C++ 用迭代器索引,c++,C++,有没有办法得到迭代器的计数 所以如果一开始我有这个: for (int i = 0; iter < agents.size(); ++i) { agents[i]->Index(i); } for(int i=0;iterIndex(i); } 记住Index()设置一个整数,我将如何使用迭代器实现这一点 for (std::vector<Agent*>::iterator iter = agents.begin(); iter < agents.end
for (int i = 0; iter < agents.size(); ++i)
{
agents[i]->Index(i);
}
for(int i=0;iterIndex(i);
}
记住Index()设置一个整数,我将如何使用迭代器实现这一点
for (std::vector<Agent*>::iterator iter = agents.begin(); iter < agents.end(); ++iter)
{
(*iter)->Index(????)
}
(std::vector::iterator iter=agents.begin();iter您想要的
距离
您需要
距离
可以对迭代器进行减法运算:
int distance = iter - agents.begin();
编辑:
仅适用于随机访问迭代器。(+1互联网让我成为)你可以减法迭代器:
int distance = iter - agents.begin();
编辑:
仅适用于随机访问迭代器。(+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)
。通常,您可以自己动手:
{
int i = 0;
for (auto it = agents.begin(), end = agents.end(); it != end; ++it, ++i)
{
(*it)->set_int(i);
}
}
如果您有随机访问迭代器,您确实可以安全地使用
std::distance(agents.begin(),it)
,正如前面所说的那样。我倾向于只使用随机访问迭代器的差异或使用计数!如果迭代器不支持减法,则循环中的工作量将变为二次。保持一个计数的成本相对来说是可以忽略的。我倾向于只使用随机访问迭代器的差异,或者使用一个计数!如果迭代器不支持减法,则循环中的工作量将变为二次。计数的成本相对来说可以忽略不计。@Let_Me__是我不知道的。什么是随机访问迭代器?问题中的那个是随机访问迭代器吗?是的,在这种情况下它可以工作,但它不能普遍工作。当然,问题是,虽然这要么在恒定时间内有效,要么不起作用,但当迭代器不是随机访问迭代器时,距离将具有线性复杂性。难道不是agents.begin()+iter吗?如果不是,为什么不呢?5和7之间的“距离”是7-5=2。同样,迭代器和向量起点之间的距离是迭代器(7)减去起点(5)。@Let_Me_Be我不知道。什么是随机访问迭代器?问题中的那个是随机访问迭代器吗?是的,在这种情况下它可以工作,但它不能普遍工作。当然,问题是,虽然这要么在恒定时间内有效,要么不起作用,但当迭代器不是随机访问迭代器时,距离将具有线性复杂性。难道不是agents.begin()+iter吗?如果不是,为什么不呢?5和7之间的“距离”是7-5=2。同样,迭代器和向量起点之间的距离是迭代器(7)减去起点(5)。如果您有随机访问迭代器,您不需要std::distance
,只需减去即可std::distance
适用于任何读取类的迭代器。如果您有随机访问迭代器,您不需要std::distance
,只需减去即可std::distance
适用于迭代器的任何读取类。