如何获取此循环的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循环,然后从中获取索引以仅使用索引的最后一个。
答案 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。最好将预增量与迭代器一起使用。可能只在调试版本中重要。