Возможный дубликат:
Найти позицию элемента в цикле С++ 11 для цикла?
У меня есть vector
, и я бы хотел его итератировать и в то же время иметь доступ к индексам для каждого отдельного элемента (мне нужно передать как элемент, так и его индекс в функцию). Я рассмотрел следующие два решения:
std::vector<int> v = { 10, 20, 30 };
// Solution 1
for (std::vector<int>::size_type idx = 0; idx < v.size(); ++idx)
foo(v[idx], idx);
// Solution 2
for (auto it = v.begin(); it != v.end(); ++it)
foo(*it, it - v.begin());
Мне было интересно, может ли быть более компактное решение. Что-то похожее на Python enumerate. Это самое близкое к тому, что я использовал цикл диапазона С++ 11, но определение индекса за пределами цикла в частной области определенно похоже на худшее решение, чем 1 или 2:
{
int idx = 0;
for (auto& elem : v)
foo(elem, idx++);
}
Есть ли какой-либо способ (возможно, использование Boost), чтобы упростить последний пример таким образом, чтобы индекс попадал в замкнутый цикл?