Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用迭代器索引_C++ - Fatal编程技术网

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
适用于迭代器的任何读取类。