unj*_*nj2 26 c++ iteration algorithm stl vector
我需要访问向量中的每个元素,并且还知道元素所在的索引.
到目前为止,我可以提出两种方法
for (iterator it= aVector.begin(), int index= 0; it!= aVector.end(); ++it, ++index)
Run Code Online (Sandbox Code Playgroud)
留下类型签名.它看起来我不能使用汽车
for (int index = 0; index < aVector.size(); ++index)
{
// access using []
}
Run Code Online (Sandbox Code Playgroud)
哪一个更有效率还是有更好的方法来做到这一点?
Mik*_*our 16
对于矢量或其他随机访问容器,它几乎没有区别.我可能会选择第二个因为它更容易阅读,并且可能稍微快一点,因为只有一个循环变量需要更新.另一种选择是:
for (auto it = aVector.begin(); it != aVector.end(); ++it) {
int index = std::distance(aVector.begin(), it);
}
Run Code Online (Sandbox Code Playgroud)
对于非随机访问容器,[]不可用,std::distance效率低; 在这种情况下,如果你需要索引,第一种方法会更好(虽然你需要修复它,所以它不会尝试在for-initialiser中声明两个不同类型的变量).
YSc*_*arf 11
其他方式。
int count = 0;
for (auto& it : aVector) {
count++;
}
Run Code Online (Sandbox Code Playgroud)
答案就是问题 - "知道元素所处的索引." .
所以 -
for (int index = 0; index < aVector.size(); ++index)
{
// access using []
}
Run Code Online (Sandbox Code Playgroud)
性能方面他们是相同的(但你可以随时描绘自己).