如何获得向量循环的int位置

时间:2018-10-18 07:53:30

标签: c++ loops vector

如何获取此循环的int位置?谢谢。

auto a = vect.begin();
auto b = vect2.begin();
auto c = vect3.begin();
for (; a != vect.end() && b != vect2.end() && c != vect3.end(); a++, b++, c++) {

}

我需要打印其他变量的值,但是我需要获取此向量循环的实际无符号int位置。

我需要使用此向量的这个位置来打印双向量。

以及如何获取向量的最后一个索引。

我的问题是要使用多个向量进行for循环,然后从中获取索引以仅使用索引的最后一个。

2 个答案:

答案 0 :(得分:4)

这很简单:如果您需要索引,请不要使用迭代器:

for (
  size_t idx = 0, idxEnd = std::min({vect.size(), vect2.size(), vect3.size()});
  idx < idxEnd;
  ++idx
)
{
  auto& obj1 = vect[idx];
  auto& obj2 = vect2[idx];
  auto& obj3 = vect3[idx];
}

(以上代码在循环开始时初始化idxEnd一次,因此不必在每次迭代时都重新计算它。这只是一种优化)。

答案 1 :(得分:4)

如Angew所示,当您需要索引时,最好使用简单的索引循环。

但是,也可以从迭代器获取索引:

auto a = vect.begin();
auto b = vect2.begin();
auto c = vect3.begin();
for (/*the loop conditions*/) {
    auto index = a - vect.begin();
}

也可以使用std::distance获取前向迭代器的索引,但是在循环中使用它是不明智的,因为对于非随机访问迭代器,复杂度是线性的。

对于正向迭代器(以及必须支持正向迭代器的通用代码),您可以编写一个循环,同时包含索引变量和迭代器。

P.S。最好将预增量与迭代器一起使用。可能只在调试版本中重要。