Duplicar posibles:
Find position of element in C++11 range-based for loop?Python como en C++
tengo un vector
y me gustaría repetir y, al mismo tiempo, tener acceso a la índices para cada elemento individual (necesito pasar tanto el elemento como su índice a una función). He considerado las dos soluciones siguientes:
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());
Me preguntaba si podría haber una solución más compacta. Algo similar a Python's enumerate. Esto es lo más cercano que obtuve usando un bucle de rango C++ 11, pero tener que definir el índice fuera del bucle en un ámbito privado definitivamente parece ser una solución peor que 1 o 2:
{
int idx = 0;
for (auto& elem : v)
foo(elem, idx++);
}
¿Hay alguna forma (tal vez usando Boost) para simplificar el último ejemplo de tal manera que el índice se autocontenga en el ciclo?
¿Por qué simplificar las cosas simples? :-) – Kos
Debería crear una función/objeto similar a un generador que devuelva std :: pair y use el primer y segundo campo del par. Probablemente pueda usar macros para hacer el truco, pero no hay una manera práctica y elegante de usar la sintaxis similar a Python en C++. Su segunda solución es probablemente lo mejor que puede hacer. – Morwenn
@Kos Estoy bastante bien con la solución 2. Solo curiosidad si hay una manera más simple :) – betabandido