Sto lavorando su una griglia N dimensionale.
Vorrei generare cicli annidati in base a qualsiasi dimensione (2D, 3D, 4D, ecc.).
Come posso farlo in modo elegante e veloce? Di seguito una semplice illustrazione del mio problema. Sto scrivendo in C++ ma penso che questo tipo di domanda possa essere utile per altre lingue.
Ho bisogno di conoscere gli indici (i, j, k ...) nella parte do do stuff. Modifica: lower_bound e upper_bound rappresentano gli indici nella griglia in modo che siano sempre positivi.Loop nidificati Variadic
#include <vector>
int main()
{
// Dimension here is 3D
std::vector<size_t> lower_bound({4,2,1});
std::vector<size_t> upper_bound({16,47,9});
for (size_t i = lower_bound[0]; i < upper_bound[0]; i ++)
for (size_t j = lower_bound[1]; j < upper_bound[1]; j ++)
for (size_t k = lower_bound[2]; k < upper_bound[2]; k ++)
// for (size_t l = lower_bound[3]; l < upper_bound[3]; l ++)
// ...
{
// Do stuff such as
grid({i,j,k}) = 2 * i + 3 *j - 4 * k;
// where grid size is the total number of vertices
}
}
... e siete davvero sicuri circa la roba '// fare 'parte ?? – Wolf
Cosa intendi? Sto chiamando il mio indice come griglia [{i, j, k}] che è generico per qualsiasi dimensione. Forse posso fare diversamente ma sono ancora interessato dalla risposta – coincoin
La ricorsione lo farà. –